我有这种情况,我必须通过AJAX检查一些东西,然后返回结果。 或简化:
function isValid() {
$.ajax(URL, data, function(response) {
isValid = response;
});
return isValid;
}
但仍无法成功。
我可以访问响应,但是在得到响应后我无法返回isValid。 例如我到处遇到的解决方案:
function isValid() {
function checkOnServer(callback) {
$.ajax(URL, data, function(response) {
callback(response);
});
}
checkOnServer(function(response) {
alert(response);
});
}
我在Stackoverflow上遇到过这个问题,但问题是:
===========================
编辑:我忘了提及如果你/我/我们试着简单地"返回"来自" checkOnServer" - 它只会将它返回给AJAX的成功回调。但这里的目标是让#is; isValid"返回结果...:)
答案 0 :(得分:0)
你的代码是明智的,但你在isValid()中使用你的回调函数,所以它不会警告!,我也有点改变你的ajax函数
function isValid() {
checkOnServer(function(response) {
alert(response);
});
}
function checkOnServer(callback) {
$.ajax({
url : URL,
data : data,
success : function(response) {
callback(response);
}
});
}
修改
变量是不能从异步方法返回的?如果我们用ajax调用函数,则在ajax响应之前立即先运行调用函数,所以只用上面的方法返回undefined。
There is two method I've know to return from asynchronous function
ajax功能完成后调用
function isValid() {
var data;
checkOnServer(function(response) {
data = response;
});
return data;
}
function checkOnServer(callback) {
$.ajax({
url : URL,
data : data,
async : false
}).done(function(response){
callback(response);
});
}
console.log(isValid());
使用responseText
function isValid() {
var data = checkOnServer();
return data;
}
function checkOnServer() {
var data = $.ajax({
url : URL,
data : data,
async : false //must set async to false
});
return data.responseText;
}
console.log(isValid());