javascript jquery ajax成功返回对象
下面是一个用方法包装的简单ajax调用javascript jquery ajax成功返回对象,javascript,jquery,ajax,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
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对象的正确语法是什么
一如既往地谢谢你!
乔恩真的不可能。Ajax调用是异步的,这意味着在调用
success
回调之前,该方法将返回
编辑/更正:您可能可以这样做,但您必须将jQuery ajaxasync
选项设置为false
,这意味着您将执行同步调用,这意味着您的整个应用程序将等待它返回。最好是在调用success
时将回调传递给要调用的函数
响应您的编辑:是,它将是未定义的,因为它与上下文无关。您需要做的是从回调内部处理数据,因为此时您将知道您拥有它,并且因为您无法从函数B返回函数a的结果数据。在回调中,您应该调用一个函数来处理您获得的数据
var latestData;
function getStuff(succeeded,failed) {...}
function gotStuff(dataWrapper) {
latestData = dataWrapper.d;
doThingsWithStuffData(dataWrapper.d);
}
getStuff(gotStuff, function () { ... });
您可以使用,因为它更适合此用途
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");
},
这就是数据类型:“json”
所做的,它为jQuery提供了一个提示,说明服务器响应中的预期内容
那么在你的功能中
function GoGetTheStringList() {
var stringList;
$.when( MyNS.GetStringList() )
.done(function( data ){ console.log( data.d ); });
.fail(function( data ) { console.log('Request failed'); });
}
因为我的第一个方法没有return语句,所以不会返回任何内容。在success方法中添加return语句也不起作用。如果我在$.ajax调用前面添加一个return,我会得到一个jhqr对象,该对象具有responseText属性,但不确定这样做有多安全,因为它可能还没有返回。对不起。一开始我完全误解了你的意思。我知道您不能从异步调用返回。那么,有没有一种方法可以通过引用传递一个值类型,这样我就不必把逻辑放在那个调用中了?你不需要把逻辑放在那个调用中。如果您检查我的回复,您将看到我在打开数据包后调用回调中的另一个函数来处理数据。另一方面,从技术上讲,所有对象参数都是通过Javascript中的引用传递的。感谢您的示例,这非常有意义。但是,我需要提出一个关于如何在javascript中通过引用传递值类型的新问题,因为我不希望发生的逻辑是简单地从success方法中获取data.d对象,并尽可能将其传递给其他方法。谢谢你的快速帮助!