WordPressがAjaxレスポンスに0(ゼロ)を追加するのはなぜですか?


16

exit()またはdie()でAjax処理関数を終了しない限り、Ajax関数は必要な正しい出力を受け取りますが、後に続きます0

なぜそれが起こっているのでしょうか?

それはそのようなことを意味するのですか、それとも修正することができますか?

add_action('wp_ajax_get_homepage', 'get_homepage');
add_action('wp_ajax_nopriv_get_homepage', 'get_homepage');

function get_homepage(){
    echo "get_homepage ->";
    exit();
}

PluginsのAJAXを読みましたが、なぜそれが必要なのですか?


あなたがワードプレスからログアウトしていても、それは(0の追加)起こりますか?
マーダー

はい、WordPressにログインしていない場合でも。
ラデク

回答:


31

からのデフォルトの応答admin-ajax.phpは、

die( '0' );

...独自の追加することによって、wp_die()またはexit()またはdie()から、ご希望のコンテンツを防止デフォルトの応答戻った後admin-ajax.phpもとして返されます。

また、通常は、ajax呼び出しが成功したことを意味します。

最終的に、あなたの質問に答えるために、それはこのように働くことを意味します。コンテンツを返した後に終了することは、正しいことです。


ご説明ありがとうございます。だから、私はdie()を使用するか、すべてが大丈夫だったことを知るために0のajax内をチェックしますか?
ラデク

2
使用するdie()exit()、コンテンツ/データをエコーし​​た後。success/completeajaxメソッドのコールバック関数で、データを操作し、それを使用してDOMを作成できます。追加のエラーチェックを行って、データの整合性を検証することもできます。また、出力前にPHPコールバック関数でエラーチェックを行うこともできます。応答を返した後に本質的に終了する0と、それと一緒に取得することもできなくなります。ところで、0応答を受け取ったからといって、ajax呼び出しが100%成功したわけではありません。ただし、出力をいつ検査するかは簡単にわかります。
アダム

1
wp_die()2.0.4で追加されたものを使用する必要があります
スリルコード

@thrillcodeは、そのプロセスにwp_dieフックできる他のプラグインまたはテーマコードにプロセスを公開する必要がない限り、使用するdieexit、大丈夫です。コードをOSSとしてリリースする場合、またはコードを他の人とうまく再生する必要がある場合wp_dieは、より望ましいと考えられます。
アダム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.