var id = $(this).children().html(); // id is 5
$.ajax({
url: 'ajax.php?id=' + id,
success: function(data) {
id = data; // id is 1
}
});
if(id == 1){ // id is again 5
...
}
为什么在以下示例中我无法重新初始化id变量?有什么问题?
感谢。
答案 0 :(得分:3)
$.ajax()
函数必须去获取数据,它没有这样做,并且在它到达代码之后立即执行成功回调。
您的代码顺序实际上是这样的:
var id = $(this).children().html();
//Ajax start
if(id == 1){ }
//Ajax end (sometime later, not immediately after)
function(data) { id = data; }
如果您依赖此值继续,请将其粘贴在成功回调中:
var id = $(this).children().html(); // id is 5
$.ajax({
url: 'ajax.php?id=' + id,
success: function(data) {
id = data; // id is 1
if(id == 1){ // id is now 1
...
}
}
});
答案 1 :(得分:2)
重构这样的代码会起作用:
function by_id() {
if(id == 1) {
... do something ...
}
}
var id = $(this).children().html();
$.ajax({
url: 'ajax.php?id=' + id,
success: function(data) {
id = data;
by_id(); // call on successful ajax load
}
});
将id
逻辑包装在函数中的优势允许您在任何地方调用它 - 无论是在AJAX请求结束时,页面加载时,按下按钮等等。
答案 2 :(得分:1)
您的 if 语句在 .ajax 调用完成之前执行
答案 3 :(得分:1)
Ajax中的A用于异步。在'success'回调中,您可以调用另一个函数或执行post-ajax代码。
答案 4 :(得分:1)
嘿,更好的解决方案是使用 async:false 属性,如下所示:
var id = $(this).children().html(); // id is 5
$.ajax({
url: 'ajax.php?id=' + id,
async: false,
success: function(data) {
id = data; // id is 1
}
});
if(id == 1){ // id is again 5
...
}
)
答案 5 :(得分:0)
AJAX函数是异步的。它将在后台运行,当它完成获取ajax.php页面后,它将运行成功函数。