2010-12-23 10 views
4

Gibt es eine Möglichkeit, eine Funktion zu verlassen, abhängig von dem Ergebnis einer GET Anfrage.jquery Exit-Funktion in Ajax Anruf

Zum Beispiel in der unten Funktion, hi, wenn die GET Ergebnisse in data, wo data === '1', mag ich die Funktion verlassen.

function hi() { 
    $.ajax({ 
     url: "/shop/haveItem", 
     type: "GET", 
     success: function (data) { 
      if (data == '1') { 
       // exit hi() function 
      } 
     } 
    }); 
    // some executable code when data is not '1' 
} 

Wie kann ich dies erreichen?

Antwort

8

ich glaube, die Lösung so etwas wie dieses

function hi() { 
    $.ajax({ 
     url: "/shop/haveItem", 
     type: "GET", 
     success: function (data) { 
      if (data == '1') { 
       ifData1(); 
      } else { 
       ifDataNot1() 
      } 
     } 
    }); 
} 
function ifData1() { /* etc */ } 
function ifDataNot1() { /* etc */ } 

sein kann, wenn Sie eine Ajax-Funktion haben, sollten Sie immer mit Callback-Funktionen arbeiten. Wenn Sie eine Ajax-Funktion synchron ausführen, wird der Browser für die Dauer eines Ajax-Aufrufs gesperrt. Dies bedeutet, dass die Anwendung während der Dauer des Anrufs nicht reagiert.

+0

Ihr Code verwendet auch "async: false" :) Bitte bearbeiten Sie es. –

+0

Entschuldigung, ein Kopierfehler Ich denke, ich werde es entfernen –

+0

großartige Lösung ~ –

0

Eine Sache, die Sie tun können, ist eine Flag-Variable. Ordnen Sie es True oder False zu, je nachdem, ob Sie beenden möchten oder nicht.

function hi() 
{ 
var flag=false;  
$.ajax({ 
      url: "/shop/haveItem", 
      type: "GET", 
      async:false, 
      success: function(data){ 
       if(data == '1') 
        flag=true; 
      } 
     }); 
if (flag) return; 
    //some executable code when data is not '1' 
    ... 
} 
+1

Einen Ajax-Aufruf asynch zu machen ist möglicherweise nicht die beste Lösung. Es wird die Anwendung für die Dauer des Ajax-Aufrufs –

+0

blockieren, es sei denn async false, falg-Variable kann keinen Ajax-Rückgabewert ermitteln. aber ich denke auch, dass ich besser eine andere Lösung finden würde –

0

Erstellen einer globalen Flag-Variable, die ich denke, würde am besten funktionieren. Getestet und funktioniert !!

window.flag = []; 

function hi() 
{ 
    $.ajax({ 
     url: "/shop/haveItem", 
     type: "GET", 
     async:false, 
     success: function(data){ 
      if(data == '1') 
       flag = true; 
     } 
    }); 

    if (flag) { 
     return false; 
    } 


//some executable code when data is not '1' 
... 
} 
1

Sie sollten in der Lage sein, false zurückzugeben, um "exit" zu simulieren.

function hi() 
{ 
    $.ajax({ 
      url: "/shop/haveItem", 
      type: "GET", 
      async:false, 
      success: function(data){ 
       if(data == '1') 
        return false 
      } 
     }); 

    //some executable code when data is not '1' 
    ... 
} 
+0

Ich denke, das ist eine der besten Antwort. Es funktioniert und es ist einfach. – nodeffect