Почему ответ Ajax добавляет детали сообщения - PullRequest
0 голосов
/ 15 февраля 2020

По какой-то причине в приведенном ниже ответе Ajax добавляются сведения о публикации, а это не предполагаемое приложение.

Я хочу использовать только идентификатор записи, который возвращается в конце. Кроме того, я попытался выяснить, почему мой Ajax возвращает детали в текстовом виде, а не в JSON, как я хотел?

Это результат ответа

Вот мой JS код:

createRate(){
    var ourNewPost = {
        'title': $(".new-rate-title").val(),
        'content': $('.new-rate-body').val(),
        'rate': $('.custom-star:checked').val(),
        'productId': $('.submit-rate').data('id')
    }

    $.ajax({
        // adding nonce key to make wordpress know we are looged in and has the permision to do that method.
        beforeSend: (xhr) => {
            xhr.setRequestHeader('X-WP-Nonce', ylsData.nonce);
        },
        url: ylsData.root_url + '/wp-json/yls/v1/rating/',
        type: 'POST',
        data: ourNewPost,
        dataType:"text",
        success: (response) => {

            console.log('congrats');
            console.log(response);
        },
        error: (response) => {
            console.log('failed');
            console.log(response);

        }
    }); 
}

, а вот мой php код маршрута:

add_action('rest_api_init','ylsRateRoute');


function ylsRateRoute(){
    register_rest_route('yls/v1','rating',array(
        'methods' => 'POST',
        'callback'=> 'createLike'
    ));

}

function createLike($data){
    if(is_user_logged_in()){
        $title = sanitize_text_field($data['title']);
        $content = sanitize_text_field($data['content']);
        $rateNum = sanitize_text_field($data['rate']);
        $productId = sanitize_text_field($data['productId']);
        if(get_post_type($productId) == 'product'){
            return wp_insert_post(array(
                'post_title' => $title,
                'post_type' => 'rate',
                'post_content' => $content,
                'post_status' => 'publish',
                'meta_input' => array(
                    'rate_related_product' => $productId,
                    'rating_rate' => $rateNum
                )
              ));
        }else{
            die("Invalid product id");
        }
      }else{
        die("you must be logged in first");
      }
}

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Решено !, проблема была в названии 'rate' моего пользовательского типа сообщения .. вероятно, один из моих плагинов использует то же имя, что влияет на результат ajax.

0 голосов
/ 15 февраля 2020

Итак, чтобы ответить на ваш вопрос о том, «почему мои Ajax возвращают детали в текстовом виде, а не в JSON`е *

Это потому, что вы запрашиваете возвращаемый массив (не JSON) )

return wp_insert_post(array(...

Если вы хотите получить ответ в формате JSON, используйте json_encode ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...