jjeaton
  • 0
Учитель

Admin-ajax.php добавляет код состояния к ответу ajax

  • 0

Я пишу плагин, который использует 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». После некоторого копания оказалось, что jQuery не будет запускать обработчик, если ответ JSON недействителен. Этот «0», добавляемый в конец, делает JSON недействительным.

Если я смотрю в admin-ajax.php код, я вижу это:

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

Документы php для die говорят, что если переданный параметр является строкой, то он будет напечатан непосредственно перед выходом, если это целое число, он не будет напечатан.

Есть ли способ избежать этой проблемы без взлома ядра и по-прежнему использовать JSON? Кроме того, это ошибка, потому что я не понимаю, как было бы желательно добавлять ноль в конец каждого ответа AJAX…

Share
  1. Поместите 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, AJAX в плагинах

    • 0

Оставить ответ

You must login to add an answer.