2013-01-05 67 views
4

可能重複:
return from jquery ajax call
jQuery: Return data after ajax call success

 $.ajax({ 
      url:"list.php", 
      dataType: "json", 
      success: function(resp){ 
       for(var i=0;i<resp.length;i++){ 
        $('#goods_list').append(
         "<h3>" + resp[i]["name"] + "</h3>" 
         + 
         "<div>Price: NT$" + resp[i]["price"] + "<br />" 
         + 
         resp[i]["description"] 
         + 
         "<hr /> <a href=# alt='"+ resp[i]["sn"]+ "' class='add_to_cart'>Add</a> | More" 
         +"</div>" 
        ); 
       } 

       var resp2 = resp; 
      } 
     }); 

     $('body').append(resp2[0]["price"]); 

而且螢火說:

ReferenceError: resp2 is not defined 
$('body').append(resp2[0]["price"]); 

如何使用$.ajax成功的數據在什麼地方其他? ($ .ajax函數之外)

該概念與「全局變量」類似。

+0

你不能因爲請求是異步的(除非你讓它同步,這會阻止你的腳本)。您必須將該行移至成功處理程序。 –

+0

我不完全確定你的模式,但你也可以在函數中返回ajax調用,然後在任何地方使用'func()。done(...)'。 – pimvdb

回答

0

如果您只是想使用success回調外的響應內容,你應該聲明的變量的方法類似外:

var resp2; 
$.ajax({ 
    url:"list.php", 
    dataType: "json", 
    success: function(resp){ 

     for(var i=0;i<resp.length;i++){ 

      $('#goods_list').append(
      "<h3>" + resp[i]["name"] + "</h3>" 
      + 
      "<div>Price: NT$" + resp[i]["price"] + "<br />" 
      + 
      resp[i]["description"] 
      + 
      "<hr /> <a href=# alt='"+ resp[i]["sn"]+ "' class='add_to_cart'>Add</a> | More" 
      +"</div>" 
      ); 

     } 

     var resp2 = resp; 
    } 
}); 

無論如何,你必須要記住的是很可能的,幾乎肯定,$ .ajax調用之後的代碼將在成功回調之前執行。它會發生,因爲這是一個異步調用。瀏覽器將執行$ .ajax調用,並在第二個線程中等待響應,請求發送完成後,會執行下一條語句(在您的代碼中,.append調用)。

所以要創建你想要的東西,你應該在你的成功回調中放置.append調用。

相關問題