【问题标题】:jQuery: a function containing an ajax() function won't return ajax() responsejQuery:包含 ajax() 函数的函数不会返回 ajax() 响应
【发布时间】:2011-03-09 21:23:15
【问题描述】:

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

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

代码如下:

fetch_ajax() 函数

function fetch_ajax(url) {
  $.ajax({
    type: 'GET', 
    url: url,
    success: function(response) {
      return response;
    }
  });
}

调用函数:

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 之前不会等待包含的函数执行。

我做错了什么?

谢谢。

【问题讨论】:

    标签: jquery


    【解决方案1】:

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

    同步请求解决方案见How do I make jQuery wait for an Ajax call to finish before it returns?。它比另一种简单得多,但如果服务器当时死机,或者过度活跃的防火墙阻止了答案,或者愤怒的lolcat在途中吃掉了你的请求,它就会挂起你的浏览器。

    【讨论】:

    • 谢谢你,这是我需要的解释。我认为现在对我来说最好的方法是将fetch_ajax() 重写为output_ajax() 之类的东西,如果你明白我的意思的话。将更多参数传递给这个新函数,它也应该能够计算 teh lolcats :) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多