0

私は AJAX (または jQuery) の専門家ではありませんが、次のように ajax リクエストを送信すると、自分がしていたことはまだかなり簡単だと思いました。

$.ajax ( requestObj );

送信されません。誰かが助けてくれることを願っています。コンテキストを提供するために、「requestObj」を次のように設定しました。

    //initialise a request object
    var requestObj = {};
    requestObj.response = 'ajax-response';
    requestObj.type = 'POST';
    requestObj.url =  my_config['ajax-service-list'][service]['url'];
    requestObj.data = $.extend ( requestObj.data , {
                                            action: service,
                                            other: parameters,
                                            _ajax_nonce: my_config['ajax-service-list'][service]['nonce']
    });
    requestObj.global = false;
    requestObj.timeout = 30000;
    requestObj.success = function ( r ) {
        alert ( "Success: " + r );
    }
    requestObj.error = function ( r ) {
        console.log ("FAILURE WITH AJAX Call ( " + JSON.stringify (r) + ")");
    }

おそらく説明が必要なことが 1 つあります。「my_config」への 2 つの参照は、Wordpress の wp_localize_script() 関数を使用して設定した Javascript 変数への参照です。基本的には、URL を見つける場所、使用する NONCE などに関するコンテキストを提供するだけです。URL と NONCE 情報が正しく機能していることをテストしたので、問題はありません。たとえば、2 つの参照が定義され、次の結果が得られた後に、行のブラウザー デバッガーにブレークポイントを設定します。 requestObj プロパティのデバッガ出力

ajax 関数を呼び出すと、すぐに成功関数が実行され、値 0 が送信されます。PHP エラー ログを見ると、リクエストが送信されていないことがわかります。$.ajax(requestOb) が実際にリクエストを送信するのを妨げているものは何ですか?

アップデート:

マイケルの賢明なアドバイスのおかげで、私は実際に外出するように要求されていることに気付きましたが、ローカル環境で実行しているため、応答は非常に速く返ってきます. 今、これはWordpressの構成にもっと関係しているのではないかと疑っています. wp_ajax_[service_name] に接続しましたが、すぐに 0 が返されます。wordpress フォーラムでこの新しい情報を使用して、この質問を再質問します。

4

3 に答える 3

2

ajax リクエストが行われたかどうかを検出するには、ブラウザー インスペクターを使用する必要があります。任意のインスペクターのネットワーク タブを開くと、発生するリクエストを監視できます。$.ajax() メソッドはどのようにインスタンス化されていますか? $.ajax() とは対照的に、これに問題がある可能性があります。

インスペクターを使用したら、送信している $_POST または $_GET データをヘッダー セクションで確認し、次に応答を確認します。HTTP 応答コードは 200 ですか? 500 の場合は、リクエストを受け取る PHP コントローラーにエラーがある可能性があります。

PHP CLI を使用している場合は、これを実行して構文エラーがあるかどうかを確認します。

php -l path/to/php/controller.php

ファイルに致命的ではないエラーがある場合は、リクエスト応答にエラー出力が表示されます。

php ファイルの先頭でも var_dump( $_REQUEST ) を試して、ファイルがデータを受信して​​いることを確認してください。ブラウザ インスペクタの応答内で検査できます。

コントローラー内のプログラムに問題がある場合は、新しい質問を投稿する必要があります。:)

于 2012-09-08T21:28:46.740 に答える
0

一見すると、URL の前後にスペースが含まれているように見えますget_action_template。それは問題かもしれません。

また、パスdataTypeが役立つ場合があります。

パラメーターなしで JSON 応答を取得しようとしない場合は、出力を投稿してください

于 2012-09-08T09:27:02.067 に答える
0

わかりました、私はついにこのいまいましい質問に答えました。ああ。私がなくては成し得なかったトラブルシューティングのスキルを提供してくれた Mathew に大いに感謝します。とにかく、問題は AJAX リクエストにあり、その結果、Wordpress Ajax マネージャーは、私が PHP 側に配置した「フック」を尊重しませんでした。

私のAJAXリクエストはどのようにオフになりましたか? POST リクエストがありましたが、URL に GET 変数がぶら下がっていました。Wordpress ベースの Ajax リクエストの重要な変数は、"action" 変数です。これは、WP の ajax マネージャーがさまざまなサービスを区別するために使用する変数であり、フックする名前です。

最終的に、私の URL は次のようになりました。

 http://mysite.com/wp-admin/admin-ajax.php

私のPOST変数には以下が含まれていました:

action: get-action-template

私のワードプレスフックは次のとおりです。

add_action ( 'wp_ajax_get-action-template' , 'AjaxServiceManager::ajax_handler' );

私の眠れぬ夜は続くかもしれないが、もうこの忌まわしい問題とは関係ないだろう. :^)

于 2012-09-09T00:17:22.687 に答える