php ответ json_encode отправляет обратно html на ajax jquery запрос вместо json - PullRequest
1 голос
/ 30 марта 2020

для простой контактной формы в качестве плагина WordPress, я создал форму в виде всплывающего окна на той же странице:

<form method="post" id="w_form" enctype="multipart/form-data">

    <label for="first_name" class="text-secondary">First Name</label>
    <input id="first_name" type="text" name="first_name"  form-control" value="" required="">

    <label for="last_name" class="text-secondary">Last Name</label>
    <input id="last_name" type="text" name="last_name" form-control" value="" required="">


    <button class="btn btn-danger" id="submit" type="submit" value="Submit" name="submit">
        Submit
    </button>

</form>

, и его данные будут отправлены на сервер ajax:

$("#w_form").submit( function(event) {

    event.preventDefault();

    $.ajax({

        type: "post",
        data: new FormData(this),
        dataType: 'json',
        contentType: false,
        cache: false,
        processData: false,
        beforeSend: function() {

            $('#submit').attr("disabled", "disabled");

        },
        success: function( response ) {

           alert( response );

           // if ( response.status == 1 ) {

           //    $('#w_form')[0].reset();

           // }


        },
        error: function (xhr, error) {

            console.debug(xhr);

            console.debug(error);

        },

    });

});

, который переходит к php коду на той же странице и в верхней части формы:

if ( isset( $_POST['first_name'] ) ) {

    $uploaded_status;

    $first_name = $_POST['first_name'];
    $last_name  = $_POST['last_name'];

    $to = 'abc@example.com';
    $subject = 'test';
    $body = 'body';


    if ( wp_mail( $to, $subject, $body, '') ) {

        $uploaded_status = 1;

    } else {

        $uploaded_status = 0;

    }

    if ( $uploaded_status == 1 ) {

        $response = array();

        $response['status']  = 1;

        $response['message'] = 'Your form submitted successfully!';

        header("Content-Type: application/json; charset=utf-8", true);

        echo json_encode($response);

    }

}

этот процесс работает правильно и отправляет данные формы по электронной почте на адрес электронной почты, но данные ответа как :success часть ajax, получает html содержимое вместо json и возвращает parsererror как console.debug(error);

, поэтому, как я уже говорил, отправка и отправка данных в виде электронной почты работает правильно, но У меня нет правильных данных для процесса ответа для управления пользовательским интерфейсом после отправки кнопки

1 Ответ

1 голос
/ 30 марта 2020

Если вы получаете недопустимые данные JSON в ответ на запрос Ajax, отправленный на ту же страницу, вам необходимо отбросить любой выходной буфер перед отправкой ответа, а затем немедленно прекратить обработку, чтобы предотвратить добавление какого-либо дополнительного содержимого в поток ответов.

if( $_SERVER['REQUEST_METHOD']=='POST' &&  isset( $_POST['first_name'],$_POST['last_name'] ){

    ob_clean();# discard any previous buffer data

    $uploaded_status;

    $first_name = $_POST['first_name'];
    $last_name  = $_POST['last_name'];

    $to = 'abc@example.com';
    $subject = 'test';
    $body = 'body';


    if ( wp_mail( $to, $subject, $body, '') ) {
        $uploaded_status = 1;
    } else {
        $uploaded_status = 0;
    }

    if ( $uploaded_status == 1 ) {
        $response = array();
        $response['status']  = 1;
        $response['message'] = 'Your form submitted successfully!';


        header("Content-Type: application/json; charset=utf-8", true);
        exit( json_encode( $response ) );#terminate
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...