2011-12-20 165 views
0

,这可能是相当简单的,但我不能找到解决我的路......我有JS(jQuery的)的代码是这样的:JavaScript的变量范围

function publicCheck(research, $clicked) { 
var result = null; 
$.ajax({ 
    type: "POST", 
    data: "research="+research+ "&action=check", 
    url: "ajax_check.pl", 
    success: function (msg) { 
      if (something ...) { 
      result = "ok"; 
      } 
      }); 
    return result; 
    } 

=>现在,为什么我会空返回的每个单次(我知道我的状况很好)。它必须是范围问题。为什么结果不是“好”,但即使条件有效也总是为空?

回答

2

$.ajax()是一个异步调用,除非你提供这是不推荐的参数

async: false 

你不能得到这样的结果,您的浏览器将冻结,直到你得到回应。

publicCheck(research, $clicked, function(status) { 
    alert(status); // yeilds ok 
}); 
3

并不想成为的意思,但你应该看上去有点提问之前,这是一个很普通的一个,这里是一个回答类似的问题:

Variable scope in Javascript Object

如果您还有疑惑, 我们能帮你。

+0

谢谢....我试了四周,但我没有看到任何类似于我的情况的答案.... – kosta5

0

由于您使用的是AJAX调用它是异步执行的:

它的更好,如果你对

function publicCheck(research, $clicked, callback) { 
    $.ajax({ 
     type: "POST", 
     data: "research=" + research + "&action=check", 
     url: "ajax_check.pl", 
     success: function (msg) { 
      if (something...) { 
       callback("ok"); 
      } 
     } 
    }); 
} 

用法回报提供一个回调。 jQuery倾向于使用AJAX如此简单,这是一种不花时间理解它的诱惑。请花点时间了解AJAX的异步特性,您将从中受益匪浅。

+0

我明白AJAX原则比我的朋友更:)使用它所有的时间...我只是在一个项目中得到了一个有趣的点: 如果我想“重用”我的代码,我需要调用这个特定的Ajax同步。这些是我使用这个ajax调用的情况: 1.(这可能是asyn)在$ selectElement.change()=>之后执行异步ajax调用,并将结果写入HTML 2.(这是where is must被同步)。提交点击后执行ajax调用,但确保如果ajax调用有一定的结果,该页面不会被发布 – kosta5

+0

我的意思是没有冒犯任何人的意见,更多的警告任何人可能会阅读它。对于数字2,你有没有异步回调提交表单,这样你就不会冒险停止浏览器? –