可能重复:
How to return the response from an AJAX call from a function?
function Run(someJsonObject) {
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
url: "/MyWebService",
data: JSON.stringify(someJsonObject),
dataType: "json",
success: function (data) {
var parsedJson = jQuery.parseJSON(data.d);
// Do some magic...
return true; // success!
},
error: function (jqXHR, textStatus, errorThrown) {
return false;
}
});
}
var result = Run({dummy:'dummy'});
如果我没有弄错,上面的函数将不会返回true或false,而是它将是未定义的。我想返回AJAX调用的结果,我宁愿让它同步(我意识到我正在使用 AJAX )。我该如何做到这一点?
答案 0 :(得分:2)
你是倒退,让你的ajax先跑。
$(function () {
$.ajax({
type: "post",
contentType: "application/json; charset=utf-8",
url: "/MyWebService",
data: JSON.stringify(someJsonObject),
dataType: "json",
success: function (data) {
var parsedJson = jQuery.parseJSON(data.d);
// Do some magic...
DoStuffWithResult(data.d);
return true; // success!
},
error: function (jqXHR, textStatus, errorThrown) {
return false;
}
});
});
function DoStuffWithResult(result){
//time to rock, i have my result
}
答案 1 :(得分:1)
如果在jquery调用中添加async
选项,它将停止异步。
话虽这么说,这通常是一个坏主意,可能会以更好的方式处理。通常,这是通过首先执行ajax调用并在成功函数中处理数据来完成的。
如果你真的坚持这样做,那么这就是你想要的:
function Run(someJsonObject) {
var result;
$.ajax({
async: false,
type: "post",
contentType: "application/json; charset=utf-8",
url: "/MyWebService",
data: JSON.stringify(someJsonObject),
dataType: "json",
success: function (data) {
var parsedJson = jQuery.parseJSON(data.d);
// Do some magic...
result = true; // success!
},
error: function (jqXHR, textStatus, errorThrown) {
result = false;
}
});
return result;
}
var result = Run({dummy:'dummy'});
答案 2 :(得分:0)
如果你想在jquery中创建一个ajax请求并让它成为Run
的返回值:
function Run(someJsonObject) {
var returnValue;
$.ajax({
type: "post",
async: false,
contentType: "application/json; charset=utf-8",
url: "/MyWebService",
data: JSON.stringify(someJsonObject),
dataType: "json",
success: function (data) {
var parsedJson = jQuery.parseJSON(data.d);
// Do some magic...
returnValue = true; // success!
},
error: function (jqXHR, textStatus, errorThrown) {
returnValue = false;
}
});
return returnValue;
}
我将async: false
添加到ajax选项中,并使用局部变量(成功和错误处理程序可访问)作为返回值。
您不能只返回$.ajax(/* snip */)
,因为它会返回一个promise对象。
答案 3 :(得分:0)
您可以简化
$.post('/MyWebService', JSON.stringify(someJsonObject), function(r) {
if(r.success) {
// do something (1)
} else {
// do else something (2)
}
},'json').error(function() {
alert('comunication error');
});
如果您收到任何此类回复
{ "success": true, data: "my_data" }
执行某事(1) 别的(2)
如果不是有效的json或超时触发器.error()