web-dev-qa-db-ja.com

Ajaxレスポンスにステータスコードを追加するAdmin-ajax.php

私は、フォーム送信を介してAjax(フォームプラグインを含むjQuery)を使用し、php関数がJSON応答を返すプラグインを書いています。

add_action( 'wp_ajax_bubbly-upload', 'bubbly_upload_submit' );

function bubbly_upload_submit() {
    // generate the response
    $response = json_encode( array( 'success' => true ) );

    // response output
    header( "Content-Type: application/json" );
    echo $response;
}

Firefoxでは、どのjQuery応答ハンドラも起動しておらず、ファイル保存ダイアログがJSON応答で開かれていました。 HTMLを返しても問題はありません。ただし、どちらの場合も、応答の最後に「0」が追加されました。少し掘ってみると、JSON応答が無効な場合、jQueryはハンドラーをトリガーしないようです。この「0」が最後に追加されると、JSONが無効になります。

admin-ajax.phpコードを見ると、これがわかります。

default :
    do_action( 'wp_ajax_' . $_POST['action'] );
    die('0');
    break;
endswitch;

phpドキュメントの では、渡されたパラメータが文字列の場合は終了する直前に表示され、整数の場合は表示されません。

コアをハックせずに、この問題を回避しながらJSONを使用する方法はありますか?また、これはバグです。すべてのAJAXレスポンスの最後にゼロを追加することが望ましいとは思われないためです。

2
jjeaton

あなたの関数にdie();を入れてください:

add_action( 'wp_ajax_bubbly-upload', 'bubbly_upload_submit' );

function bubbly_upload_submit() {
    // generate the response
    $response = json_encode( array( 'success' => true ) );

    // response output
    header( "Content-Type: application/json" );
    echo $response;
    die();
}

参照: WordPress Codex、プラグインのAJAX

4
sorich87