2012-02-28 2 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

возможно дубликат [Не удается получить правильное значение, возвращаемое из вызова JQuery Ajax] (HTTP: // StackOverflow .com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call) –

ответ

3

Это потому, что getJSON является асинхронным. Это означает, что переменная counter не будет увеличена до того, как будет достигнут alert(counter). Вместо этого переместите предупреждение только после $.each() цикла:

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

Можете ли вы рассказать мне, как я могу получить значение счета за пределами вызова $ .getJSON() или если Я использую метод $ .POST() из jquery, разрешает ли он проблему? – JMoh

+0

Вы можете работать со значением count внутри функции обратного вызова метода AJAX, независимо от того, выполняете ли вы это непосредственно, как в вашем примере, или вызываете функцию в другом месте и передаете ей переменные. –

+0

в принципе я хочу $ .getJSON() должен выполнить свою функцию успеха, и код должен работать в соответствии с номерами строк, сверху вниз, без пропуска любой строки – JMoh

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); 

        }); 

      }); 

    } 
Смежные вопросы