JSON .parse одиночная переменная - Uncaught SyntaxError: неожиданный токен <in JSON - PullRequest
0 голосов
/ 31 марта 2020

Я начал с Ajax и, к сожалению, у меня проблема с JSON .parse (). Я хочу передать переменную по клику.

Пока я не нашел ответа на мою конкретную c проблему. Может быть, кто-то здесь может помочь мне.

Сообщение об ошибке:

Uncaught SyntaxError: Unexpected token < in JSON at position 68
at JSON.parse (<anonymous>)
at Object.<anonymous> (ajax.js?ver=5.3.2:13)
at c (jquery.js:2)
at Object.fireWith [as resolveWith] (jquery.js:2)
at l (jquery.js:2)
at XMLHttpRequest.<anonymous> (jquery.js:2)

Моя JS -функция: /admin/script/ajax.js

    $("#make").change(function(){

        var make = $('#make').val();
        console.log('Select Value hat sich geändert zu ' + make);

        $.ajax({
                url: wpAjax.ajaxUrl,
                data: 'make=' + make,
                type: 'post'
            }).done(function(model){
            model = JSON.parse(model);   // Here comes the error.
        })
    })
})

Моя PHP -Функция: администратор / скрипт / фильтр. php

<?php
  if(isset($_POST['make'])) {
     $model = 'Model S';
     echo json_encode($model);
  }
?>

Функции Wordpress. php в теме

function my_enqueue() {

    wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/admin/script/ajax.js', array('jquery') );

    wp_localize_script( 'ajax-script', 'wpAjax',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue' );

get_template_part( 'admin/script/filter');

1 Ответ

0 голосов
/ 31 марта 2020

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

Скажите, что имя действия get_model

add_action( 'wp_ajax_get_model', 'my_func' ); // Here action name tied to function
add_action( 'wp_ajax_nopriv_get_model', 'my_func' ); // Here too for unregistered users

function my_func(){
    if(isset($_POST['make'])) {
        $model = 'Model S';
        echo json_encode($model);
    } else {
        die('No models');
    }
}

, затем вам нужно определить имя действия как ajax параметр в javascript

$("#make").change(function(){
    var make = $('#make').val();
    console.log('Select Value hat sich geändert zu ' + make);
    $.ajax({
            url: wpAjax.ajaxUrl,
            data: {
                  'make': make,
                   action: 'get_model'},  // add action name here
            type: 'post'
        }).done(function(model){
        model = JSON.parse(model);   // Here comes the error.
    })
})

И теперь я подозреваю, что это должно работать хорошо. Пожалуйста, проверьте

Вы можете посмотреть параметры записи в консоли разработчика браузера enter image description here

После сбоя вы можете найти реальный ответ в «Предварительный просмотр» и «Ответ» "вкладки в консоли разработчика (включите фильтр" XHR "раньше)

enter image description here

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