2010-05-01 131 views
0
$(document).ready(function() { 
    $('#button').click(function() { 
     try { 
      var json = $.ajax({url : 'http://www.example.com/experimental/service.php', type : 'jsonp', success : function() {alert('success')}}); 
      alert(json); 
     } catch(err) { 
      alert(err.description) 
     } 
     var sjson = JSON.stringify(json); 
     $('#display').html(sjson); 
    }) 
}) 

按下按鈕後,我收到一條警告消息,指出「成功」,還有一條說明未定義,指的是ajax調用沒有返回任何內容。我檢查了螢火蟲'淨'選項卡,並確實從服務器「jsonp1272724228884({})」得到了成功的響應;「有任何想法嗎?

回答

1

如果您想在使用ajax回調後立即使用結果,您必須設置ajax調用的async : false屬性以使其同步。由於這通常不是你想要做的事情,所以你可能應該以不同的(異步)方式處理響應。

2

我認爲alert(json);顯示爲undefined,因爲它在接收到響應之前運行。

請記住,'ajax'是'異步',因此在您的值有機會分配一個值之前,警報將繼續並執行。

此外,即使它確實起作用,您的json變量也只會引用已創建的對象XMLHttpRequest。如果你想訪問數據本身,你需要在回調中這樣做。

var json; 

$.ajax({ 
    url : 'http://www.example.com/experimental/service.php', 
    type : 'jsonp', 
    success : function(data) { 
        alert('success'); 
        json = data; 
        alert(json); 
       } 
}); 

編輯:

還有一個error:回調可以分配。如果服務器返回錯誤代碼,則回調將執行。我想這就是你打算用你的try/catch複製的東西。

+0

就是這樣!非常感謝! – Shawn 2010-05-01 15:10:43

相關問題