-1
$.post("../js.php", {state: state},
                            function(data) {
                                return data;
                        });

これが私のjqueryコードです。ご覧のとおり、post リクエストが js.php に送信されます。

js.php のコードは次のとおりです。

{...}
$query = "SELECT * FROM table WHERE x='" . $y . "'";

$result = $mysqli->query($query);

$num_rows = $result->num_rows;

echo $num_rows ? $num_rows : 0;

ここで、js ファイルで「データ」を警告すると、正常に表示されます。しかし、それを返そうとしたり、変数に割り当てようとすると、うまくいきません。コンソールは、データの値が割り当てられた変数が未定義であることを示しています。

何かご意見は?

更新されたコード:

var data = null;

$.post("../js.php", {state: state},
function(response) {
data = response;
});

console.log(data);

まだ動作していません。:(

4

5 に答える 5

2

投稿の関数はコールバック関数です。返す人がいないため、何も返すことはできません。

コールバック内で返されたデータを使用する必要があります。次に例を示します。

$.post("../js.php", {state: state},
                            function(data) {
                                $('.someClass').html(data);
                        });
于 2012-08-06T14:03:37.683 に答える
1

非同期メソッドなどに渡すコールバックは$.post、非同期呼び出しが返されると、将来のある時点で実行されます。JavaScript の実行は別の場所に移動したため、コールバック先がありませんreturn

次のように想像してください。

//Some code... executed as you would expect
var data; //Currently undefined

$.post("../js.php", {state: state}, function(response) {
    //Callback is executed later, once server responds

    data = response; //No good, since we already executed the following code
    return response; //Return to where? We have already executed the following code
});

/* More code... we carry on to this point straight away. We don't wait for
   the callback to be executed. That happens asynchronously some time in
   the future */

console.log(data); //Still undefined, callback hasn't been executed yet

非同期呼び出しによって返されたデータを操作する必要がある場合は、コールバックで行います。

于 2012-08-06T14:06:27.173 に答える
0
var data = null;
$(...).click(function(e) {
    $.post("../js.php", {state: state},
                        function(response) {
                            data = response;
                    });
});

その後、data変数にアクセスするだけです。投稿リクエストが完了しない限り、その値は null になることに注意してください。

于 2012-08-06T14:02:41.910 に答える
0

このような AJAX 呼び出しは ASYNCHRONOUS (AJAX のAが表すもの) であるため、投稿した例は毎回何もしません。

出力の値を使用できるようにする場合は、値を含む一意の ID を持つ隠し要素をページに追加します。次に、JavaScript を介してその要素にアクセスできます。

于 2012-08-06T14:03:11.967 に答える
0

これは、ajax 呼び出しが非同期であるためです。コールバック関数から値を返すべきではありません。コールバックでジョブを実行するか、イベントをトリガーします。

于 2012-08-06T14:03:44.197 に答える