ant*_*ioh 6 javascript ajax jquery
我有一个javascript函数调用泛型函数来对服务器进行ajax调用.我需要从ajax调用的回调函数中检索结果(true/false),但我得到的结果总是"未定义".
没有我所有逻辑的通用函数的超简化版本将是:
function CallServer(urlController) {
$.ajax({
type: "POST",
url: urlController,
async: false,
data: $("form").serialize(),
success:
function(result) {
if (someLogic)
return true;
else
return false;
},
error:
function(errorThrown) {
return false;
}
});
}
Run Code Online (Sandbox Code Playgroud)
调用它的函数将是这样的:
function Next() {
var result = CallServer("/Signum/TrySave");
if (result == true) {
document.forms[0].submit();
}
}
Run Code Online (Sandbox Code Playgroud)
"result"变量总是"未定义",调试它我可以看到正在执行回调函数的"return true"行.
有关为什么会发生这种情况的任何想法?我怎样才能将返回值从回调函数冒泡到CallServer函数?
谢谢
Vin*_*ert 15
万一你想要采用异步方式(这是一个更好的解决方案,因为它不会在执行请求时冻结你的浏览器),这里是代码:
function CallServer(urlController, callback) {
$.ajax({
type: "POST",
url: urlController,
async: true,
data: $("form").serialize(),
success:
function(result) {
var ret = ( someLogic );
callback(ret);
},
error:
function(errorThrown) {
return false;
}
});
}
function Next() {
CallServer("/Signum/TrySave", function(result) {
if (result == true) {
document.forms[0].submit();
}
});
}
Run Code Online (Sandbox Code Playgroud)
刚刚找到了如何做到这一点:) 声明一个变量并从回调函数中相应地更新它。之后我可以返回该变量。我为未来的读者放置了代码:
function CallServer(urlController) {
var returnValue = false;
$.ajax({
type: "POST",
url: urlController,
async: false,
data: $("form").serialize(),
success:
function(result) {
if (someLogic){
returnValue = true;
return;
}
},
error:
function(errorThrown) {
alert("Error occured: " + errorThrown);
}
});
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)