jQuery:Ajax调用成功后返回数据?

  • 回答 (2)
  • 关注 (0)
  • 查看 (124)

有这样的一个简单的调用脚本

function testAjax() {
    $.ajax({
      url: ""getvalue.php"",  
      success: function(data) {
         return data; 
      }
   });
}

但如果这样

var output = testAjax(svar); // output will be undefined...

那么怎样才能返调用数据?下面的代码似乎不工作...

function testAjax() {
    $.ajax({
      url: ""getvalue.php"",  
      success: function(data) {
      }
   });
   return data; 
}
HERO坑货HERO坑货提问于
嗝屁软件工程回答于

不能从异步函数中返回任何东西。你可以回报的是一个承诺。我解释了在这些问题的答案中,jQuery中的承诺是如何工作的:

返回AJAX调用数据的JavaScript函数

jQuery jqXHR - 取消链接调用,触发错误链

如果你能解释你为什么要返回数据,以后又想怎么处理,那么我可能会给你一个更具体的答案。

一般来说,而不是:

function testAjax() {
  $.ajax({
    url: "getvalue.php",  
    success: function(data) {
      return data; 
    }
  });
}
你可以这样写你的testAjax函数:
function testAjax() {
  return $.ajax({
      url: "getvalue.php"
  });
}

那么你可以得到这样的承诺:

var promise = testAjax();

你可以存储你的承诺,你可以传递它,你可以在函数调用中用它作为参数,你可以从函数中返回它,但是当你最终想要使用由AJAX调用返回的数据时,你必须像这样做:

promise.success(function (data) {
  alert(data);
});

(有关简化语法,请参阅下面的更新。)

如果你的数据在这个时候是可用的,那么这个函数将被立即调用。如果不是的话,只要数据可用,它就会被调用。

完成这一切的关键是你的数据在调用$ .ajax之后不能立即使用,因为它是异步的。承诺是一个很好的功能抽象说:我不能返回你的数据,因为我还没有它,我不想阻止,让你等待,所以这是一个承诺,而不是,你将能够稍后再使用它,或者把它交给其他人,并完成它。

大叔也犯二为了此岸的完整构建永无法到达的彼岸回答于

从函数返回数据的唯一方法是进行同步调用,而不是异步调用,但是在等待响应时会冻结浏览器。

你可以传递一个处理结果的回调函数:

function testAjax(handleData) {
  $.ajax({
    url:"getvalue.php",  
    success:function(data) {
      handleData(data); 
    }
  });
}

像这样调用它:

testAjax(function(output){
  // here you use the output
});
// Note: the call won't wait for the result,
// so it will continue with the code here while waiting.

扫码关注云+社区

领取腾讯云代金券