根据我写ajax请求的方式,我得到了不同的结果。下面,是我写的一个版本按预期工作:JQuery Ajax处理
$('btn').click(function(){
$.ajax({
url: "JSONHandler.aspx",
type: 'get',
data: { IsParam : true, anotherParam: paramString, lastParam: paramString2 }, // this data is arbitrary
cache: false,
error: function() {
alert("You made an error");
},
dataType: 'json',
success: function (data) {
if (data.result == false) {
$.ajax({
url: "JSONHandler.aspx",
type: 'get',
data: {IsNewParam : true, anotherNewParam: paramNewString}, // this data is arbitrary
cache: false,
error: function() {
alert("You made a different error");
},
dataType: 'json',
success: function (data) {
if (data.result == true) {
// do stuff
} else {
// do other stuff
}
}
});
}
else {
// Do different things
}
}
});
}
但是,如果我写这样的代码,该函数不预成型体inteneded:
$('btn').click(function(){
$.ajax({
url: "JSONHandler.aspx",
type: 'get',
data: { IsParam : true, anotherParam: paramString, lastParam: paramString2 }, // this data is arbitrary
cache: false,
error: function() {
alert("You made an error");
},
dataType: 'json',
success: function (data) {
if (data.result == false) {
var result = callAjax();
if (result == true)
// do stuff
else
// do other stuff
}
else {
// Do different things
}
}
});
}
function callAjax()
{
$.ajax({
url: "JSONHandler.aspx",
type: 'get',
data: {IsNewParam : true, anotherNewParam: paramNewString}, // this data is arbitrary
cache: false,
error: function() {
alert("You made a different error");
},
dataType: 'json',
success: function (data) {
if (data.result == true) {
return true;
} else {
return false;
}
}
});
}
例如,让说我想要顶部($('btn')。click)函数在“// do stuff”部分中发出警报。如果我通过第一个示例运行它,我会按照预期收到警报。
但是,如果我在第二个示例中的“// do stuff”中放置警报,我没有按预期得到警报。在调用浏览器中的开发工具时,我可以看到第二个函数是调用并按照预期返回,但是到这种情况发生时,原始(调用)ajax函数已经移过分支 if(result == true)语句,并且不考虑这个结果,不管它是否为真。
这是为什么?我想它与ajax的异步部分有关,但我想我只是不明白为什么顶部的例子会工作,但底部不会。
有人能帮我理解吗?
在这两个例子中的成功是功能如果Web服务器返回HTTP 200 OK要调用的异步回调。在第二个示例中,您调用方法callAjax(),并在启动Web请求后立即返回。您正在编写synhconous操作,因此,请执行ajax请求同步或使用第一个示例(在Web服务器响应后也会调用成功方法) –
感谢您的回应!我现在正在学习如何异步编程,所以这帮助我更好地理解。 – Noahm888