jQuery全局变量问题
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变量? 怎么了?
谢谢。
$.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 ... } } });
像这样重构代码会起作用:
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请求结束时,页面加载时,按下按钮等。
在.ajax调用完成之前执行if语句
Ajax中的A用于异步。 在’success’回调中,您可以调用另一个函数或执行post-ajax代码。
嘿,更好的解决方案是使用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 ... }
;)
AJAX函数是异步的。 它将在后台运行,当它完成获取ajax.php页面后,它将运行success函数。