2013-10-30 49 views
0

內部變量我有一個AJAX請求:如何訪問一個塊

var foo = [], 
parse = ''; 
$.ajax({ 
    type: "GET", 
    url: "some/path/", 
    data: somedata 
}).done(function(data){ 
    $.each(data.item, function(i, value){ 
    foo.push(value); 
    }); 
    parse = foo.join(', '); 
}); 

現在字符串parse是我想要的數據。我怎樣才能訪問這些數據?我試着用alert()顯示它,但它沒有顯示任何東西。我認爲這與變量範圍有關。

我怎樣才能得到這些數據?

+0

檢查錯誤控制檯。 –

+0

你在哪裏放置警報?另外 - 在調試器中,您是否在'data'變量中看到數據?此外 - 這是無效的Javascript(你有錯誤) – Leon

+0

可能重複的[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response -a-ajax-call) –

回答

3

parse看起來像一個全局變量,所以它可以在任何地方使用。這個問題可能是在你嘗試訪問它的時候。您只能訪問.done()處理程序中的parse或您從中調用的某些功能。

原因是你的ajax調用是異步的。這意味着該操作開始,您的JavaScript的其餘部分繼續執行,然後有一段時間ajax調用完成,然後纔是parse變量有效。因此,實際上沒有理由按照您的方式聲明parse變量。您應該在.done()處理程序中使用它的值。

這是異步編程,工作方式與同步順序編程不同。您必須使用異步編程技術與異步ajax調用。


如果您嘗試訪問parse.done()處理程序中,它仍然空在那裏,那麼問題很可能是data.item是不是你想的是,也許不是觸發.each()循環,從而沒有什麼是投入fooparse。爲了調試這種情況,你應該看看datadata.item究竟是什麼。


這將是我的建議:

$.ajax({ 
    type: "GET", 
    url: "some/path/", 
    data: somedata 
}).done(function(data){ 
    // no reason for these variables to be wider scope than here 
    var foo = [], parse; 

    $.each(data.item, function(i, value){ 
     foo.push(value); 
    }); 
    parse = foo.join(', '); 

    // look at parse here 
    console.log(parse); 

    // if parse still empty, then look at data and data.item here 
    // to see what they are for debug reasons 
    console.log(data); 
    console.log(data.item); 

    // now, you can use parse here 
    callSomeFunction(parse); 
}); 
相關問題