2017-09-28 3 views
0

Ich habe diese Funktion:jQuery Ajax, async: false, Rückkehr undefined

GetMessage: function (code) { 
      var msg = localStorage.getItem(code); 
      if (msg == null || msg == 'undefined') { 
       $.ajax({ 
        type: 'GET', 
        url: CTHelper.ApiUrl() + '/Api/Case/GetMessage?code=' + code, 
        async : false, 
        success: function (result) { 
         localStorage.setItem(code, result); 
         return result; 
        }, 
        error: function (result) { 
         return ''; 
        } 
       }); 
      } 
      else { 
       return msg; 
      } 
     }, 

Das erste Mal aufgerufen wird, geht es an den Server ($ Schnipsel) und speichert einen Wert in der local , so erhalten die zweiten und so weiter Aufrufe den Wert aus dem Cache/Speicher.

Nun, es funktioniert gut, alle Zeiten, aber der erste Aufruf, scheint es wie Rückergebnis im Erfolg Funktion immer undefiniert zurückgibt.

Ich dachte, die Einstellung der async: false würde das Problem beheben, aber es hat nicht

Unter einem Bild, das mein Problem Funktionen

enter image description here

+1

See this: https: //stackoverflow.com/a/2592780/1623249 –

Antwort

2

Die return-Anweisungen innerhalb der 2 Rückruf veranschaulicht success und error geben Sie Ihre GetMessage Funktion nicht zurück - sie kehren von den Rückrufen zurück. Wenn Sie Ihre Funktion soll die richtige Nachricht zurückzukehren, weisen Sie das Ergebnis zu msg und senden Sie es immer am Ende des GetMessage:

GetMessage: function(code) { 
    var msg = localStorage.getItem(code); 
    if (msg == null || msg == 'undefined') { 
    $.ajax({ 
     type: 'GET', 
     url: CTHelper.ApiUrl() + '/Api/Case/GetMessage?code=' + code, 
     async: false, 
     success: function(result) { 
     localStorage.setItem(code, result); 
     msg = result; 
     }, 
     error: function(result) { 
     msg = ''; 
     } 
    }); 
    } 

    return msg; 
}, 

Sehen Sie das Ergebnis unter

enter image description here

+0

Ausgezeichnete Antwort, sehr hilfreich +1 –