javascript jquery ajax成功返回对象

use*_*412 2 javascript ajax jquery

这是一个包含在方法中的简单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
});
}
Run Code Online (Sandbox Code Playgroud)

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

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

        alert(reasonsDictionary); // THIS IS UNDEFINED!

    }
Run Code Online (Sandbox Code Playgroud)

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

一如既往地谢谢!乔恩

Ioa*_*mas 6

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

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

响应您的编辑:是的,它将是未定义的,因为它不在上下文中.你需要做的是从回调内部处理您的数据,因为在这一点上,你会知道你拥有它,因为你不能作为函数的结果,对来自函数B.返回的数据在你的回调,你应该调用处理您获得的数据的功能.

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

getStuff(gotStuff, function () { ... });
Run Code Online (Sandbox Code Playgroud)