我想要一个从ajax请求返回值的函数。我想停止javascript执行,直到函数获取其值由ajax异步请求返回。 类似的东西:
function myFunction() {
var data;
$.ajax({
url: 'url',
data: 'data to send',
success: function (resp) {
data = resp;
},
error: function () {}
}); // ajax asynchronus request
return data; // return data from the ajax request
}
答案 0 :(得分:41)
你需要注册一个回调函数,如下所示:
function test() {
myFunction(function(d) {
//processing the data
console.log(d);
});
}
function myFunction(callback) {
var data;
$.ajax({
url: 'url',
data: 'data to send',
success: function (resp) {
data = resp;
callback(data);
},
error: function () {}
}); // ajax asynchronus request
//the following line wouldn't work, since the function returns immediately
//return data; // return data from the ajax request
}
答案 1 :(得分:9)
Ajax是异步的,这意味着调度了ajax调用,但是你的代码仍然像以前一样快乐地运行而不停止。在收到响应之前,Ajax不会停止/暂停执行。你必须添加一个额外的回调函数或类似的东西。
function myFunction() {
var data;
$.ajax({
url: 'url',
data: 'data to send',
async: false,
success: function (resp) {
data = resp;
callback.call(data);
},
error: function () {}
}); // ajax asynchronus request
return data; // return data from the ajax request
}
答案 2 :(得分:5)
你需要做async = False,如:
$.ajax({
async: false,
// ...
success: function(jsonData) {
//Your Logic
}
});
答案 3 :(得分:4)
$.ajax({
url: 'url',
data: 'data to send',
async: false,
success: function (resp) {
data = resp;
},
error: function () {}
}); // ajax synchronus request
答案 4 :(得分:3)
使用async: false
表示您的ajax请求,因为Ajax是异步的。
将async设置为false意味着您调用的语句必须在调用函数中的下一个语句之前完成。如果设置async:true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用下一个语句。
来自jQuery docs:
默认情况下,所有请求都是异步发送的(即设置为 默认为true)。如果需要同步请求,请将此选项设置为 假