2016-07-21 15 views
0

Ich arbeite an Cordova Hybrid Mobile App. Ich rufe eine API auf, um Daten in meine Variablen zu laden und zu verarbeiten. Unten ist das Problem.Ajax Anruf funktioniert zunächst nicht, aber erfolgreicher Anruf danach

Zuerst rufe ich die API mit Ajax. Nach dem Ajax-Aufruf überprüfe ich, ob jsonString leer ist. Wenn dies der Fall ist, lade ich die Seite neu, um den Ajax-Aufruf erneut auszuführen.

$.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; 

Ich habe einen Debugger an Ort und Stelle in der Erfolg Anruffunktion, aber es trifft nicht und gehen Sie direkt zu überprüfen, ob jsonString leer ist, die leer ist, weil es nicht das Ajax ruft Daten zu laden und fahren Sie mit Popup anzeigen, um den Benutzer zum erneuten Laden der Seite aufzufordern.

Nach dem Neuladen der Seite wird der Debugger im Erfolgsaufruf gedrückt und kann den Wert abrufen. Daher ist der jsonString nicht leer und kann fortfahren.

ich auf die Registerkarte Netzwerk in der Konsole zu überprüfen, zeigt es das folgende Ergebnis: enter image description here

Es scheint, dass der erste Anruf gemacht wurde, aber immer bleiben anhängig. Der zweite Aufruf ist der Erfolg und gibt den richtigen Wert zurück. Also wird die jsonString-Prüfung bestanden.

Dieses Problem tritt die ganze Zeit auf, wo der erste Ajax-Aufruf nicht erfolgreich ist und in ausstehende, aber alle nachfolgende Aufrufe erfolgreich sind.

Also was könnte hier falsch sein? Wie stelle ich sicher, dass der erste Ajax-Anruf erfolgreich durchgeführt wird und die Daten immer wieder gesendet werden?

Antwort

2

Ajax ist asynchron, Ihre Logik in der Erfolgsfunktion ausgeführt für sie ausgeführt werden, wenn der Ajax-Aufruf

$.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; 
abgeschlossen