2016-03-19 8 views
0

私は正常に動作しているのですが、正しく動作しているかどうかは不明です。asychromous callback

私は、コードを持っている:

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

PHPは次のよ​​うになります。

<?php 

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

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

echo $data; 

?> 

それは現時点では動作しますが、このAJAX呼び出しが非同期でしょうか?それはコールバックを伴いますか?私はそれを別の方法で扱うべきですか?

+1

'$ .post()'の引数_is_ callbackの無名関数です。 – Teemu

+0

したがってdoSomething()関数はすでにコールバックとして機能します。 –

+1

あなたのコードは正しいです、おめでとう、 – NaN

答えて

2

このAJAX呼び出しがはい

非同期になります。 $.post()は、 JQuery's $.ajax() methodの省略形であり、デフォルトでは非同期です。

それはもちろん、コールバック

を伴わず、この文の終わりに、あなたの関数がコールバック関数です。

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

あなたはAPIについての詳細を読むことができ、これらの機能がどのように動作するか、そのデフォルト値は何であり、パラメータの種類は、彼らが受け入れる:

+0

私は別の質問があります。私の問題は、以前の機能では複数のポストリクエストがあったため、後続のポストリクエストでデータが割り当てられていないということです。どのように機能しているブラウザは、複数の投稿要求を処理しますか?それは呼び出しを行い、次のコードを実行し続けますか? –

+0

@トムアルバニア語別の質問にしてみてください。人々があなたの問題を完全に理解できるようにしてください。 –

0

私は、.done().fail()の方法を使用すると、それに従うのが簡単になると思います。

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

そしてPHPコードであなたは、要求が失敗したときに指示する必要があります。

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

をあなたが延期値を取り戻す$.post(または$.get$.ajax)を呼び出した場合。遅延値は、将来的に終了する(または失敗する)ものです。

遅延値がいつ行われるかを調べるには、.done(fn).fail(fn)を使用して、遅延値にコールバックハンドラを追加できます。遅延値が終了すると、コールバック関数が呼び出されます。

+0

@NaNわかりません。教えてください。私はそれがはるかにクリーンであることがわかります。サーバーが要求を処理できない場合、それは失敗します。シンプル。要求が、それが返すデータに基づいて失敗したかどうかを判断することは、単純なものを複雑にするだけです。 –

関連する問題