2016-07-21 2 views
0

Я работаю над мобильным мобильным устройством Cordova. Я вызываю API для загрузки данных в свои переменные и обработки их. Ниже приведена проблема.Ajax вызов не работает сначала, но успешный вызов после этого

Во-первых, я называю API с помощью ajax. После вызова ajax, я проверяю, является ли jsonString пустым, и если это так, я перезагружаю страницу, чтобы снова запустить вызов ajax.

$.ajax({ 
      url: GetConfigUrl // working URL, 
      type: 'POST', 
      data: { 
       token: '123456' 
      }, 
      cache: false, 
      datatype: 'json', 
      contenttype: "application/json",    
      success: function (data, response, xhr) { 
       debugger 
       jsonString = data.Value; 
      }, 
      error: function (data) { 
       // do nothing 
      ) 
     }); 

     if (jsonString == '') { 
      // Display popup to ask user the reload the page 
     } 

     return true; 

У меня есть отладчик на месте в функции успеха вызова, но он не попал и прямо идти, чтобы проверить, если jsonString пуст, который пуст, поскольку он не вызывает Аякса, чтобы загрузить данные и приступить к отобразить всплывающее окно, чтобы попросить пользователя перезагрузить страницу.

После того, как вы нажмете на перезагрузку страницы, отладчик в вызове успеха ударил и смог получить значение. Таким образом, jsonString не пуст и может продолжить.

проверить вкладку Сети в консоли, он показывает результат ниже: enter image description here

Похоже, что первый звонок был сделан, но всегда остается в ожидании. Второй вызов является успешным и возвращает правильное значение. Таким образом, проверка jsonString передается.

Эта проблема возникает всегда, когда первый вызов ajax не увенчался успехом и в ожидании, но все последующие вызовы успешны.

Так что, может быть, неправильно? Как обеспечить, чтобы первый вызов ajax был успешно выполнен и возвращал данные все время?

ответ

2

Ajax выполняется асинхронный месту вашей логики в функции успеха для того, чтобы выполняться, когда вызов Ajax завершает

$.ajax({ 
      url: GetConfigUrl // working URL, 
      type: 'POST', 
      data: { 
       token: '123456' 
      }, 
      cache: false, 
      datatype: 'json', 
      contenttype: "application/json",    
      success: function (data, response, xhr) { 
       debugger 
       jsonString = data.Value; 
       if (jsonString == '') { 
       // Display popup to ask user the reload the page 
       } 

      }, 
      error: function (data) { 
       // do nothing 
      ) 
     }); 


     return true; 
Смежные вопросы