2011-01-06 63 views
6

Dưới đây là một số mã mà tôi đang gặp sự cố. Về cơ bản, tôi định nghĩa một mảng trống là một biến toàn cục (var playlist = []) và sau đó cố gắng thêm các phần tử vào nó trong một cuộc gọi jQuery $ .get. Từ những gì tôi đã đọc trên internet, tôi sẽ có thể làm điều này! Đoạn mã sau đưa ra lỗi: "Không thể gọi phương thức 'phát' không xác định". danh sách phát [0] không được đặt trong hàm, cảnh báo danh sách phát [0] trong cuộc gọi $ .get cho kết quả mong đợi, nhưng nó không tồn tại bên ngoài chức năng.

var playlist = []; 
function playArtist(artist){ 
    $.get('media/songs/' + artist, 
    function(data){ 
     for (var i in data){ 
     playlist[i] = setSong(data[i].Resource.name,'track' + data[i].Media.id,i + 1); 
     } 
    $('#track-total').text(parseInt(playlist.length)); 
    },'json' 
); 
    playlist[0].play(); 
} 

Có ai giúp được không?

Cảm ơn!

Trả lời

2

Cơ hội là, playlist được sử dụng trước khi trả tiền $.get - khi cuộc gọi ajax không đồng bộ. Nó hoạt động trong vòng gọi lại thành công vì bị phát hiện khi yêu cầu đã hoàn tất, vì vậy nó sẽ chứa dữ liệu bạn mong đợi.

+0

Yup, di chuyển danh sách phát [0] .play() bên trong hàm $ .get đã thực hiện thủ thuật. Cảm ơn rất nhiều! – Will

1

.get là không đồng bộ, do đó cần phải cung cấp chức năng gọi lại. Trong khi nhận được của bạn vẫn đang trong quá trình bạn đang cố gắng sử dụng mảng, có lẽ trước khi nó thực sự được dân cư.

6

Bạn không phải thực hiện bất kỳ thao tác nào trong số này. Tôi chạy vào cùng một vấn đề với dự án của tôi. những gì bạn làm là thực hiện cuộc gọi hàm bên trong cuộc gọi lại thành công để đặt lại biến toàn cầu. Miễn là bạn nhận được javascript không đồng bộ được đặt thành false, nó sẽ hoạt động chính xác. Đây là mã của tôi. Hy vọng nó giúp.

var exists; 

//function to call inside ajax callback 
function set_exists(x){ 
    exists = x; 
} 

    $.ajax({ 
    url: "check_entity_name.php", 
    type: "POST", 
    async: false, // set to false so order of operations is correct 
    data: {entity_name : entity}, 
    success: function(data){ 
    if(data == true){ 
     set_exists(true); 
    } 
    else{ 
     set_exists(false); 
    } 
    } 
}); 

if(exists == true){ 
    return true; 
} 
else{ 
    return false; 
} 

Hy vọng điều này sẽ giúp bạn.

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