2013-10-19 13 views
6

Tôi đang sử dụng: http://www.jquery-steps.com/Examples#async trong dự án của tôi. Đó là một plugin Jquery tuyệt vời để thêm trình thuật sĩ.jquery-steps | gửi dữ liệu đến máy chủ trên tải nội dung ajax

Câu hỏi của tôi là về các bước động. Nội dung của bước tiếp theo sẽ phụ thuộc vào câu trả lời của bước trước đó. Làm thế nào tôi có thể gửi dữ liệu bổ sung với cuộc gọi AJAX đến chương trình phụ trợ của tôi. Chương trình phụ trợ của tôi sẽ thực hiện bước tiếp theo dựa trên giá trị đó.

Tôi đã tìm kiếm tài liệu và mã nguồn nhưng không thể tìm thấy câu trả lời.

Trả lời

4

Hiện tại có hai cách để nhận ra điều đó. Một với nhiều hơn và một với những nỗ lực ít hơn. Nhưng ít nỗ lực hơn cũng có nghĩa là ít kiểm soát hơn - nói cách khác là Các bước jQuery xử lý việc hiển thị và ẩn thông báo tải và chính cuộc gọi không đồng bộ. Nhưng dù sao, giải pháp đầu tiên (ít nỗ lực hơn) yêu cầu bạn thêm bước không đồng bộ mặc định khi khởi tạo như bạn thường sử dụng.

<div id="wizard"> 
    <h1>Choose</h1> 
    <div> 
     <select id="choose"> 
      <option value="0" selected="selected">default</option> 
      <option value="1">extraordinary</option> 
     </select> 
    </div> 
    <h1>Result 1</h1> 
    <div data-mode="async" data-url="/rest/service/0"></div> 
</div> 

Sau đó, thêm một phần nhỏ của mã vào sự kiện onStepChanging như melc đề cập. Mã này sẽ phân tích dữ liệu của bước trước đó và loại bỏ nếu cần thiết bước không đồng bộ mặc định và thêm một mã mới ở cùng một vị trí nhưng với một URL khác.

<script> 
    $(function() 
    { 
     var wizard = $("#wizard").steps({ 
      onStepChanging: function(event, currentIndex, newIndex) 
      { 
       if (currentIndex === 0) 
       { 
        if ($("#choose > option:selected").val() === "1") 
        { 
         wizard.steps("remove", 1); 
         // In this case you could also use add instead of insert 
         wizard.steps("insert", 1, { 
          title: "Result 2", 
          contentMode: "async", 
          contentUrl: "/rest/service/1" 
         }); 
        } 
       } 
       return true; 
      } 
     }); 
    }); 
</script> 

Giải pháp khác đã được mô tả bởi melc.

+0

Cảm ơn cả hai.Tôi thích có quyền kiểm soát nhiều hơn, vì vậy tôi đã thực hiện một giải pháp như Melc đề xuất. Trong sự kiện onStepChanging của tôi, tôi gọi một hàm để thực hiện cuộc gọi Ajax và gửi chỉ mục/tiêu đề hiện tại tới phần cuối. Các phụ trợ đáp ứng với nội dung tương ứng. Trong thời gian đó, bước tiếp theo (trống) được hiển thị cho người dùng bằng hoạt ảnh của trình tải. Bước cuối cùng là đặt nội dung của bước trống 'mới'. Cách hiệu quả nhất để thiết lập ngữ cảnh của bước này là gì? ID của DIV được tạo động, vì vậy tôi không thể chọn chúng. PS Tôi có thể chỉ cho điểm 1 câu trả lời không? – user2779014

8

Trong tài liệu hướng dẫn nó đề cập đến một sự kiện mà là bắn trước khi thay đổi một bước, https://github.com/rstaib/jquery-steps/wiki/Settings#events

Vì vậy, những gì bạn cần làm là thêm một chức năng gọi lại về sự kiện này và lấy dữ liệu từ máy chủ dựa trên những gì đã được được chọn trên bước hiện tại. Khi bạn nhận được dữ liệu làm mới nội dung của bước tiếp theo.

Cần thận trọng vì cuộc gọi đến máy chủ của bạn không đồng bộ và sự kiện onStepChanging được gọi trước khi chuyển sang bước tiếp theo. Để làm cho nó hoạt động bình thường cho cả bạn và người dùng của bạn (không chặn), bạn cần hiển thị trình tải lên trên trang tiếp theo cho đến khi bạn nhận được phản hồi từ cuộc gọi ajax đến máy chủ và sau đó thay thế trình quay bằng cách điền dữ liệu của bước.

+0

Cảm ơn bạn! Làm cách nào để tôi có thể cho điểm/phiếu bầu cho câu trả lời của bạn? – user2779014

+0

@ user2779014 Bạn có thể upvote bằng cách nhấp vào mũi tên lên (hình tam giác tối) ở bên cạnh. Cảm ơn. – melc

0

Bước cuối cùng là đặt nội dung của bước trống 'mới'. cách hiệu quả nhất để thiết lập ngữ cảnh của bước này là gì? ID của của DIV được tạo động, vì vậy tôi không thể chọn chúng. PS Can Tôi chỉ đưa ra một điểm cho 1 câu trả lời

Có cùng vấn đề với người dùng2779014. Phải sử dụng bộ chọn phức tạp để có được nội dung phù thủy cho bước đúng

$.ajax({ url: './Advanced Example Content Loading with AJAX Alternative With More Control.php', 
     data: { GenerateContentName: $("#GenerateContentID > option:selected").val() }, 
     type: 'POST', 
     success: function(output) { 
         //Gets the options object (object passed to the steps() function) 
         var options = wizard.data("options"); 
         var bodyTag = options["bodyTag"]; 
         wizard.children(".content").children(bodyTag).eq(newIndex).html(output); 
        } 
}); 

Full Code: http://plnkr.co/edit/OyHkcZEBv8Fon3vJv7PZ

Note mã đầy đủ không làm việc mà không cần tải nó, và lưu trữ nó trên một máy chủ web, như nó sử dụng PHP.

+0

mã đã đăng không hoạt động (liên kết được cung cấp đã sử dụng) –

Các vấn đề liên quan