javascript jquery ajax成功返回对象

时间:2011-11-21 14:03:46

标签: javascript jquery ajax

这是一个包含在方法中的简单ajax调用。

MyNS.GetStringList = function (successCallback, failedCallback) {
var methodUrl = serverUrl + "/GetStringList";
$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    url: methodUrl, // Location of the service
    data: {}, //Data sent to server
    beforeSend: function (XMLHttpRequest) {
        //ensures the results will be returned as JSON.
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
    },
    success: successCallback,
    error: failedCallback
});
}

这是调用上述方法的方法。

function GoGetTheStringList() {
        var stringList;
        stringList = MyNS.GetStringList(function (data) { return data.d; }, function (XmlHttpRequest, textStatus, errorThrown) {
            alert("error");
        });

        alert(reasonsDictionary); // THIS IS UNDEFINED!

    }

使第一个方法返回data.d对象的正确语法是什么?

一如既往地谢谢! 乔恩

2 个答案:

答案 0 :(得分:6)

它不能真的。 Ajax调用是异步的,这意味着该方法将在调用success回调之前返回。

编辑/更正:您可以这样做,但您必须将jQuery ajax async选项设置为false,这意味着您将执行同步调用,这意味着您的整个应用程序将等待它返回。最好是在调用success时将调用传递给函数进行调用。

响应您的修改:是的,它将是未定义的,因为它已脱离上下文。你需要做的是从回调内部处理你的数据,因为那时你会知道你拥有它,并且因为你不能从函数B中返回数据A.在你的回调中你应该调用一个处理你得到的数据的功能。

var latestData;
function getStuff(succeeded,failed) {...}
function gotStuff(dataWrapper) {
    latestData = dataWrapper.d;
    doThingsWithStuffData(dataWrapper.d);
}

getStuff(gotStuff, function () { ... });

答案 1 :(得分:0)

您可以使用jQuery deffered,因为它更适合此目的。

MyNS.GetStringList = function () {
var methodUrl = serverUrl + "/GetStringList";
return $.ajax({                            // return here, this will returns a deffered object
          type: "GET",
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          url: methodUrl, // Location of the service
          data: {} //Data sent to server
       });
}

您不应该这样做

beforeSend: function (XMLHttpRequest) {
            //ensures the results will be returned as JSON.
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
           },

这就是dataType: 'json'所做的,它为jQuery提供了关于服务器响应中的预期的提示。

然后在你的函数中

function GoGetTheStringList() {
      var stringList;
      $.when( MyNS.GetStringList() )   
      .done(function( data ){  console.log( data.d );  }); 
      .fail(function( data ) { console.log('Request failed'); });
}