2012-02-28 193 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的