我想在函数中运行ajax请求。基本上...
function doIt(id) {
var myVar;
$.ajax({
... url etc...
success: function(result) {
myVar = "Some stuff" + result;
console.log(myVar);
}
})
return myVar;
}
但myvar未设置为成功后记录时的状态。如何通过函数重新调整该变量?
答案 0 :(得分:3)
ajax调用是异步的,所以它并行发生,这是你没有得到结果的原因
您不能像这样返回值
var myVar;
function doIt(id) {
$.ajax({
... url etc...
success: function(result) {
myVar = "Some stuff" + result;
console.log(myVar);
// do your logic here after the ajax success
}
})
}
答案 1 :(得分:2)
$.ajax
是异步的,这意味着在下一行执行之前它还没有完成。发生的事情是return myVar;
在success
事件触发之前执行。
关闭async
属性,这将从根本上解决您的问题:
function doIt(id) {
var myVar;
$.ajax({
... url etc...,
async: false,
success: function(result) {
myVar = "Some stuff" + result;
console.log(myVar);
}
})
return myVar;
}
然而,这将使您的浏览器挂起,因此解决此问题的最佳方法是将所有处理放在success
事件中。
function doIt(id) {
var myVar;
$.ajax({
... url etc...,
async: false,
success: function(result) {
myVar = "Some stuff" + result;
console.log(myVar);
// TODO: Everything related to `myVar` here.
}
})
}
答案 2 :(得分:2)
您无法从AJAX调用返回值。这是异步的。 return
在AJAX调用完成之前运行。
您需要在回调中执行与myVar
相关的所有逻辑。