【问题标题】:How to make a function return data retrieved via AJAX [duplicate]如何使函数返回通过 AJAX 检索的数据 [重复]
【发布时间】:2014-02-10 16:03:39
【问题描述】:

在我的 javascript 文件中,我使用上面的函数异步获取服务器计算的值:

function function2(userid)
    {
        $.ajax({
                        type: "POST",
                        url: "http://localhost/bghitn/web/app_dev.php/get_number_of_articles",
                        data:{id:userid},
                        cache: false,
                        success: function(data){

                          return data;      
                        }
                        });

    }

其实我在一组函数里面调用function2

function1();
var userid=.....
var x= function2(userid);
function3(x);

问题: 如您所见,function3 使用function2 返回的数据。但似乎function3 在 AJAX 调用成功完成之前开始执行。我尝试使用when 函数但徒劳无功。

$.when(function2(userid)).done(function(){
function3();
        });

在前面的AJAX请求成功执行后,如何让下一个javascript代码执行?非常感谢您的建议。

【问题讨论】:

  • Ajax 是异步的,这是行不通的。将回调传递给函数并在 ajax 完成时执行它。
  • 您的第二次尝试几乎成功,但您必须兑现承诺。 return $.ajax(...)
  • 谢谢大家。@JanDvorak 提供的链接非常有用
  • @JanDvorak,我以为我上次理解你,但事实上,我没有。我试过你的话,但徒劳无功。接受的答案中的第三个选项背后的想法是否相同?

标签: javascript php jquery ajax symfony


【解决方案1】:

选项 1:您始终可以将 AJAX 调用设置为同步,但要准备好整个页面在等待响应时卡住。只需将参数 async: false 添加到您的参数集即可。

选项 2:提供回调或将您未来的代码放入成功处理程序中

选项 3:您可以使用此处描述的 defer/promise http://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt1-theory-and-semantics

【讨论】:

  • 就是这样,非常感谢。除了问题 cmets 中的链接,我将使用提供的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
相关资源
最近更新 更多