在我的情况下,如何在AJAX回调函数之外访问从ajax调用返回的数据?

问题描述 投票:1回答:4

我有一个生成对服务器的ajax调用的函数:

function askServer(callback) = {
     $.ajax({
       // ...
       async: true, //I have to use true here
       success: function(response) {
         callback(response); //callback handle server response
       },

     });
  };

处理服务器响应的功能:

function handleResponse(){
     var dataObject;
     askServer(function(response){

         //response is an object {car:{id:2, name:TOYOTA}}
         dataObject=response.car;
     });
    //Now, I would like to access the dataObject outside callback function
    //but if I make it like this, the dataObject value will be null because it is outside the callback

}

如何如上所述访问外部回调函数中的dataObject? (dataObject包含服务器响应数据)

我必须使用async: true,如果使用async:false,我知道可以摆脱这个问题。

javascript jquery ajax dom-events javascript-framework
4个回答
2
投票
var dataObject;

function handleResponse() {
  askServer(function(response) {
    dataObject = response.car;
  });
}

2
投票

这是分配回调返回的值AFTER的问题。之前进行任何尝试只会导致“未定义”的怪癖。

解决方案:在.ajax调用之外定义函数,然后在.ajax成功函数中-调用您定义的函数PASSING返回的数据。

如果这不是您想要的,请告诉我们如何解决您的问题。另外,您的代码有点混乱,并且您的函数(响应)中带有逗号。如果您有原始问题的解决方案,也许您可​​以清理掉,这样其他人可以发现这个帖子更有用。

BTW-async = true是默认值;)

干杯。


1
投票

如果您“必须”进行异步调用,那么根据定义,您不知道回调发生之前需要多长时间。这就是为什么在这种情况下首先使用回调概念的原因。需要对异步ajax调用的结果进行的所有处理都需要在回调中(或在从回调中调用的其他函数中)进行。

[页面上其他地方的其他函数可以测试看看结果是否还没有出现-如果回调将结果存储在全局声明的变量中,则在回调实际发生之前,它显然将不可用,但与此同时,其他代码可以测试该变量是否为null或未定义:如果为null,则您仍在等待响应,但是如果有一个值,则您知道响应已经发生。


-1
投票

声明

var dataObject;

在函数外部作为全局级别变量。然后,您可以从任何其他功能访问它。

© www.soinside.com 2019 - 2024. All rights reserved.