jQuery:包含ajax()函数的函数不会返回ajax()响应

jQuery: a function containing an ajax() function won't return ajax() response

为了使我的jQuery代码模块化,即可重用,我在另一个函数fetch_ajax()中放置了一个ajax()函数。我试图用其他地方的参数调用fetch_ajax(),这应该只运行包含的ajax()并返回响应。

但是这种情况并没有发生 - 相反,fetch_ajax()显然会很快地向调用者返回false,并且不会等到ajax()完成请求并得到响应。

这是代码:

fetch_ajax()功能

1
2
3
4
5
6
7
8
9
function fetch_ajax(url) {
  $.ajax({
    type: 'GET',
    url: url,
    success: function(response) {
      return response;
    }
  });
}

调用功能:

1
2
3
4
function caller() {
  response = fetch_ajax('script.php');
  alert(response); //this is always 'undefined'
}

fetch_ajax()中,我尝试不直接从ajax()中返回response,而是将其写入变量,并在ajax()之后返回该变量 - 这也不起作用(相同的结果)。

当我在ajax()函数内部的return response;之前放置第二个警报时,我看到在caller()内部之后发生一次火警。所以我想不知怎的,fetch_ajax()不会等待包含的函数在返回false之前执行。

我究竟做错了什么?

谢谢。


你的想法是错误的 - .ajax()函数被写入不等待包含的函数。 success是一个事件侦听器,因此只要响应到达就会动态触发它。 您可以使用同步请求或jQuery队列来解决此问题,但两者都有缺点。

请参阅如何让jQuery在返回之前等待Ajax调用完成? 用于同步请求解决方案。 它比另一个简单得多,但如果服务器正常死亡,或者一个过度活跃的防火墙阻止了答案或者愤怒的lolcat在途中吃掉你的请求,它会挂起你的浏览器。