8

私はばかげた間違いを犯しているに違いありませんが、 $.post 関数から取得したデータを返して変数に格納することはできません。それだけでなく、その関数内から何も返せません。例:

function test(){

$.post("demo_test_post.asp",
    {
      name:"Donald Duck",
      city:"Duckburg"
    },
    function(data,status){
      return(data)
    });

}

var foo = test()
alert(foo)

それは foo が未定義であると言います。しかし、私がこれを行う場合でも、さらに一歩進めるために:

function test(){

    $.post("demo_test_post.asp",
        {
          name:"Donald Duck",
          city:"Duckburg"
        },
        function(data,status){

          var bar = "bar"
          return(bar)
        });

    }

    var foo = test()
    alert(foo)

それはまだ foo is undefined と言っています...私は何か間違ったことをしている、または何かを誤解しているに違いありません。誰か助けてください。

ありがとう

4

6 に答える 6

13

$.post は非同期関数です。関数からのコントロールは post を実行するとすぐに返されますが、post からの応答は後で受信される場合があります。

したがって、リターンの代わりにコールバック関数を使用し、外部でコールバック関数を定義することができます。

いう、

function test(){

  $.post("demo_test_post.asp",
    {
      name:"Donald Duck",
      city:"Duckburg"
    },
    function(data,status){
      my_function(data)
    });

}

function my_function(data){
  // you can operate on data here
}
于 2013-06-07T15:35:31.560 に答える
4

からは何も返されませんpost()。内部にfunction(data, status) {}あるのは実際にはコールバックであり、post()あなたが考えるようにメソッドに結果を返しません。

詳細については、この記事をお読みください

于 2013-06-07T15:34:17.847 に答える
4

jQuerypost()はデフォルトで非同期です。つまり、このような関数から値を返すことはできません。

jQuery ドキュメントを引用するには

非同期(デフォルト: true)

タイプ: ブール値

デフォルトでは、すべてのリクエストは非同期で送信されます (つまり、これはデフォルトで true に設定されています)。同期リクエストが必要な場合は、このオプションを false に設定します。

値を更新するには、コールバック関数を提供する必要があります。

例 非常に基本的な例。

var foo;
test();    

function test(){    
    $.post("demo_test_post.asp",
        {
          name:"Donald Duck",
          city:"Duckburg"
        },
        function(data,status){

          var bar = "bar"
          foo = bar; // assign foo

        });    
    }    
}

または、jQuery Ajax をSynchronousに変更することも検討できます。こちらの投稿をご覧ください。jQuery で非同期ではなく同期の Ajax 要求を実行するにはどうすればよいですか?

于 2013-06-07T15:37:52.140 に答える
4

.done() を使用して、返されたデータを実行してみてください。これにより、データを取得し、終了する前に変数またはアラート データを設定しないようにする必要があります。

$.post("demo_test_post.asp", { name: "Donald Duck", city: "Duckburg" })
.done(function(data) {
  alert("Data Loaded: " + data);
  //Or return data;
});
于 2013-06-07T15:38:02.433 に答える
2

jQuery AJAX リクエストは非同期で行われます。つまり、リクエストが開始され、$.post()メソッドはほぼ即座に戻ります。リクエストは、バックグラウンドでブラウザによって処理されます。リクエストが完了すると、jQuery は に指定したコールバック関数を呼び出します$.post()。を使用async: falseして、リクエストが完了するまでブロックするよう jQuery に指示できますが、パフォーマンスが大幅に低下し、ユーザー エクスペリエンスが低下することはほぼ確実であるため、これはお勧めできません。

代わりにすべきことは、AJAX 応答に依存するロジックがコールバック関数によって開始されるようにコードを記述することです。何かのようなもの:

function handleAjaxResponse(responseData) {
  // do something with the response.
}

function doAjax() {

  $.post("demo_test_post.asp",
    {
      name:"Donald Duck",
      city:"Duckburg"
    },
    function(data, status){
      handleAjaxResponse(data);
    });

}

doAjax();
于 2013-06-07T15:42:47.527 に答える
1

より合理化された.post()方法を使用しています。これは、(IMHO) で作業するのがより面倒であり、より大きな形式よりもやや強力ではありません$.ajax()

個人的には.ajax()、追加された構造によりフォーマットが簡単になるため、この方法が好ましいことがわかりました。また、より多くのことができます.ajax(データが返されるまで処理を遅らせたい場合に非常に役立つ場合がある非同期をオフにするなど、より多くのオプションがあります)。

完全な方法を使用する簡単な例$.ajax()を次に示します。一番下の関数に注意してくださいsuccess-- ここで、他の PHP ファイルから送り返されたデータを使用できます!

于 2013-06-07T15:46:25.770 に答える