2016-03-19 15 views
0

Ok, ich habe es funktioniert, aber ein wenig unklar, ob ich es richtig gemacht habe.Asychrome Rückruf

Ich habe den Code:

function post(){ 
    var info = "hello"; 
    $.post("test.php", {"info":info}, function(data){ 
     if(data !== "success"){ 
      alert("Test failed"); 
     } 
     else{ 
      doSomething(); 
     } 
    }); 
} 

php wie folgt aussieht:

<?php 

$info = $_POST['info']; 
$data = failed; 

if(isset($_POST['info'])){ 
    $data = "success"; 
} 

echo $data; 

?> 

Es ist im Moment funktioniert, aber diese Ajax-Aufruf asynchron sein würde? beinhaltet es einen Rückruf? Sollte ich es anders handhaben?

+1

Die anonyme Funktion in '$ .post()' s Argumente _ist_ Callback. – Teemu

+0

So fungiert die doSomething() Funktion bereits als Callback. –

+1

Herr, Ihr Code ist korrekt, Herzlichen Glückwunsch – NaN

Antwort

2

würde dieser Aufruf Ajax asynchron sein

Ja; $.post() ist eine Abkürzung für JQuery's $.ajax() method, die standardmäßig asynchron ist.

mit sich bringt es eine Rückruf

Natürlich Ihre Funktion am Ende dieses Textes ist die Callback-Funktion.

$.post("test.php", {"info":info}, function(data){ 
//        ^^^^^^^^^^^^^^ 
    if(data !== "success"){ 
     alert("Test failed"); 
    } 
    else{ 
     doSomething(); 
    } 
}); 

Sie können mehr über die API gelesen und wie diese Funktionen arbeiten, was sind die Standardwerte, und welche Art von Parameter, die sie akzeptieren:

+0

ok, ich habe eine andere Frage. Ich denke, mein Problem ist, dass ich bei einer früheren Funktion mehrere Post-Anfragen hatte und daher keine Daten für die Verwendung bei Post-Anfragen zugewiesen wurden. Wie behandelt ein Browser mehrere Postanforderungen in einer Funktion?Ruft es einen Anruf auf und führt dann folgenden Code weiter aus? –

+0

@TomAlbanese Versuchen Sie vielleicht, dies zu einer separaten Frage zu machen, damit die Leute Ihr Problem besser verstehen können. –

0

Ich denke, mit den .done() und .fail() Methoden würde es einfacher zu folgen.

function post() { 
    return $.post("test.php", {info:"hello"}).done(function() { 
     doSomething(); 
    }).fail(function() { 
     alert("Test failed"); 
    }); 
} 

Und dann in der PHP-Code müssen Sie angeben, wenn die Anforderung fehlgeschlagen:

if (! isset($_POST['info'])) { 
    header($_SERVER["SERVER_PROTOCOL"] . ' 400 Bad Request'); 
    die; 
} 
// Do what you need to do... 

Wenn Sie anrufen $.post (oder $.get und $.ajax) Sie wieder einen latenten Wert. Zurückgestellte Werte sind Dinge, die in der Zukunft enden (oder scheitern).

Um herauszufinden, wann der verzögerte Wert fertig ist, können Sie Callback-Handler zum verzögerten Wert hinzufügen, indem Sie .done(fn) und .fail(fn) verwenden. Wenn der verzögerte Wert erledigt ist, werden die Callback-Funktionen aufgerufen.

+0

@NaN Ich weiß es nicht. Du sagst es mir. Ich finde es viel sauberer. Wenn der Server die Anforderung nicht verarbeiten kann, schlägt sie fehl. Einfach. Das Ermitteln, ob eine Anfrage aufgrund der zurückgegebenen Daten fehlgeschlagen ist, verkompliziert nur etwas, das einfach sein sollte. –