2012-03-31 6 views
2

Ich habe Schwierigkeiten, den Rückgabewert einer Funktion an die json-Antwort ihres Ajax-Aufrufs anzupassen.Wie setzt man den Rückgabewert einer Funktion auf die json-Antwort ihres Ajax-Aufrufs?

function callMe() {  
    $.ajax({ 
     url: "someJson.php", 
     type: "GET", 
     dataType: 'json',    
     success: function(response){ 
      return response; 
    } 
} 

var jsonResponse = callMe(); 

Wie bekomme ich jsonReponse zum Halten der JSON-Antwort?

+0

sehen http://stackoverflow.com/questions/1572610/ajax-jquery-synchronous-callback-success – bnieland

Antwort

1

Diese standardmäßig nicht möglich ist, weil Ajax asynchron ist; Sobald Sie also die Ajax-Anfrage gesendet haben, wird die Funktion fortgesetzt und wartet nicht, bis der Ajax-Aufruf zurückkehrt, bevor die Funktion beendet wird. Es ist am besten zu tun, was immer Sie brauchen, um den Erfolg des Ajax-Aufrufs zu erreichen.

Edit:

Sie können einen Ajax-Aufruf synchron machen, aber es wird nicht empfohlen, weil es den Browser einsperren kann.

Beachten Sie, dass synchrone Anfragen den Browser vorübergehend sperren können. Deaktivieren Sie alle Aktionen, während die Anfrage aktiv ist.

jQuery Ajax Info

+0

Also, das ist möglich nur nicht zu empfehlen. – iambriansreed

+0

Dies ist standardmäßig nicht möglich. Wie wäre es gut, ihm zu sagen, wie man etwas macht, das schlecht ist und verpönt ist? –

+0

Hängt davon ab, was die Definition von ** ist **. – iambriansreed

-1

Machen Sie es wie folgt aus:

function callMe() { 
    var result = false; 
    $.ajax({ 
     url: "someJson.php", 
     type: "GET", 
     async: false, 
     dataType: 'json',    
     success: function(response){ 
      result = response; 
      return response; 
    } 
    return result; 
} 

var jsonResponse = callMe(); 
+1

Nein, nein, nein, nein, nein ... – canon

+0

@antisanity warum nicht? –

+0

Siehe Jmeins Antwort. – canon

1

Da der Standard verhalten von jquery ajax Asynchron-Modus ist, kann man nicht direkt die Antwort bekommen. mindestens Sie haben zwei Wahl:

  1. die func als Parameter in "callme" pass:
function callMe(callback) { 
    $.ajax({ 
     url: "someJson.php", 
     type: "GET", 
     dataType: 'json',    
     success: function(response){ 
      callback(response); 
     } 
    }); 
} 

function dealResponse(response) { 
    // do something with response 
} 

callMe(dealResponse); 
  1. Ajax-Anwendung Sync-Modus, und der Code direkt Antwort und Angebot bekommen verwenden damit. Aber wenn Sie diesen Weg gehen, blockiert Ihr Skript und kann den Browser vorübergehend sperren, wenn die ajax-Anfrage beginnt, bis die Anfrage endet.
function callMe() { 
    var ret; 

    $.ajax({ 
    url: "someJson.php", 
    type: "GET", 
    async 
    dataType: 'json',    
    success: function(response){ 
     ret = response; 
    } 
    }); 

    retun ret; 
} 

var jsonResponse = callMe(); 

Hoffnung diese könnten Ihnen helfen :)

Verwandte Themen