2012-02-28 142 views
0

我在我的功能一个我设置其值为声明的全局命名计数器= 0变量我的index.html页头部分内全局变量未设置值正常

<script> 
var counter=0; 
</script> 

现在

function getCounter(param) 
    { 
     $.getJSON("somewebserviceURL&format=json&callback=?", 
      function(data) 
      { 
       $.each(data, function(i, item) 
        { 
         counter++; 
        }); 

      }); 
//I am not able to get the latest value here & in upcoming functions which use this variable 
     alert(counter); 

    } 
+0

可能重复://计算器.com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call) – 2012-02-28 11:58:57

回答

3

这是因为getJSON是异步的。这意味着在alert(counter)命中之前counter变量不会增加。相反,移动警报只是你$.each()循环后:

function getCounter(param) { 
    $.getJSON(
     "somewebserviceURL&format=json&callback=?", 
     function(data) { 
      $.each(data, function(i, item) { 
       counter++; 
      }); 
      alert(counter); 
     } 
    ); 
} 
+0

你能告诉我可以在$ .getJSON()调用之外获得计数值吗?我使用jQuery的$ .POST()方法是否解决问题? – JMoh 2012-02-28 10:05:46

+0

您只能使用AJAX方法的回调函数中的计数值,无论您是直接执行此操作(如您的示例中所示),还是通过在别处调用函数并将变量传递给它。 – 2012-02-28 10:10:24

+0

基本上我想$ .getJSON()应该执行它的成功函数&代码应该按照行号运行意味着从上到下而不跳过任何行 – JMoh 2012-02-28 10:13:02

1

很简单,因为你的alert()比处理速度就越快counter++;

.getJSON()仅仅是一个AJAX的呼叫时,asynchr onous。

这意味着JavaScript代码,不等待,直到你的Ajax调用完成后,将继续无需等待。

0
function getCounter(param) 
{ 
    $.getJSON("somewebserviceURL&format=json&callback=?", 
     function(data) 
     { 
      $.each(data, function(i, item) 
       { 
        counter++; 
       }); 
      // try this 
      alert(counter); 
     } 
    ); 
} 
1

这是因为getJSON是异步发送的。在getJSON的成功回调之前调用您的警报。成功回调不会被调用,直到你有响应,那么alert()已经被触发。

0

你很可能回调此:

function getCounter(param, callback) { 
    $.getJSON("somewebserviceURL&format=json&callback=?", 
     function(data) 
     { 
      $.each(data, function(i, item) 
       { 
        counter++; 
       }); 

      callback.call(this, counter); 
     } 
    ); 
} 

getCounter(param, function(counter) { alert(counter); }); 
0

全部都是真实的这里的getJSON是异步的!

只是转移警报()里面脱颖而出每次循环看到受影响的值按以下

function getCounter(param) 
    { 
     $.getJSON("somewebserviceURL&format=json&callback=?", 
      function(data) 
      { 
       $.each(data, function(i, item) 
        { 
         counter++; 
         alert(counter); 

        }); 

      }); 

    } 
[无法从一个jQuery的Ajax调用正确的返回值(HTTP的