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对象的正确语法是什么?
一如既往地谢谢!乔恩
它真的不可能.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)