2009-11-19 28 views
18

Kịch bản folowing không chờ đợi với $ .get để kết thúc tải trang trước khi tiếp tục với vòng lặp:

$.each(data.songs, function(index, val) { 
    $('#nowartist') 
     .append('song starting'); 
    $.get("http://localhost/play.php", function(data){ 
     alert('done'); 
    }); 
}); 

dữ liệu là một đối tượng JSON

Bất kỳ ý tưởng hoặc ý kiến ​​sẽ được đánh giá rất nhiều.

Trả lời

49
$.ajax({ 
    async: false, 
    type: 'GET', 
    url: 'http://localhost/play.php', 
    success: function(data) { 
      //callback 
    } 
}); 

Điều đó nên thực hiện.

http://docs.jquery.com/Ajax/jQuery.ajax#options

+3

Chỉ để OP nhận thức được, từ liên kết ở trên: "Lưu ý rằng các yêu cầu đồng bộ có thể tạm thời khóa trình duyệt, tắt bất kỳ hành động nào trong khi yêu cầu đang hoạt động". –

+1

hoạt động nhưng cũng đưa ra cảnh báo này trong trình duyệt Chrome của tôi: '' 'speed.min.js: 2 [Ngừng sử dụng] XMLHttpRequest đồng bộ trên chuỗi chính không được chấp nhận vì ảnh hưởng bất lợi của nó đến trải nghiệm của người dùng cuối. Để được trợ giúp thêm, hãy kiểm tra https: // xhr.spec.whatwg.org/.'''. Rõ ràng điều này là do cài đặt 'async: false'. Bất kỳ ý tưởng nào về giải pháp thay thế có thể xóa cảnh báo này? – tsando

2

Nếu bạn không muốn có khả năng khóa các trình duyệt, bạn có thể làm theo cách này mà chỉ giữ chugging qua bài hát cho đến khi tất cả chúng đều xử lý.

function play_next(){ 
    var song = data.songs.shift(); // Removes the first song and stores it in song 

    $('#nowartist').append('song starting'); 

    $.get("http://localhost/play.php", function(ret_data){ 
     alert('done'); 
     if(data.songs.length) play_next(); // Call next song if more songs exist; 
    }); 
} 
play_next(); // Start it off 

Lưu ý, nó thay đổi mảng data.songs bằng cách xóa mục khi xử lý. Nếu đây là vấn đề, sao chép mảng trước khi bắt đầu để nó loại bỏ các phần tử khỏi mảng trùng lặp.

Trên một lưu ý phụ, tôi giả sử bạn không dán tất cả mã của bạn ... ngay bây giờ nó tải cùng một trang cho mỗi bài hát, nhưng không có gì từ mục song đang được sử dụng để thay đổi yêu cầu trong bất kỳ đường.

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