2013-01-05 64 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调用。

相关问题