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函数。