Неожиданный токен C в JSON в позиции 0 при передаче массива из php в ajax - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь отправить массив из php в ajax в файле json, но когда я предупреждаю res var для его тестирования, я вижу следующее сообщение об ошибке:

Uncaught SyntaxError: Неожиданный токен C в JSON в позиции 0

Мой массив такой:

["C", "Dbm", "Bb", "Bb", "F", "Cm", "Eb", "Dbm", "Bb", "Bb", "F", "Cm", "F", "Bb", "Eb", "Bb", "F",…]

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

Java Script:

$(".T-chords").on('click',function(event){

    event.preventDefault();
    var This = $(this);
    $.ajax({

        url : data.ajax_url,
        type : 'post',
        dataType: 'json',
        data : {

            action : 'transpose_callback',
            content : data.content,
            target_scale : This.text(),
            base_scale : data.base_scale,
        },

        success:function(response){

            var res = JSON.parse(response);
            alert(res[1]);

        },

        error: function(){

            alert("err");

        }


    })

})

php код:

function Ajax_transpose_callback(){
    header('Content-Type: application/json');
    $content = $_POST['content'];
    $Target_Scale = $_POST['target_scale'];
    $Base_Scale = $_POST['base_scale'];
    $Flag_db = "";
    $transposed_chord = "";
    $transposed_arr = array();

    if(preg_grep('/#/', $content)){
        $Flag_db = "0";
    }
    elseif (preg_grep('/b/', $content)){
        $Flag_db = "1";
    }
    else{
        $Flag_db = "0";
    }

    foreach ($content as $item) {

        $final_item = substr( $item, 1, - 1 );
        $transposed_arr[] = Transpose( $Flag_db, $Base_Scale, $Target_Scale, $final_item );

    }
    wp_die(json_encode($transposed_arr));
}

Ответы [ 2 ]

3 голосов
/ 02 июля 2019

Вы можете исправить это двумя способами, 1) Заменить var res = JSON.parse (response); оповещение (резисторный [1]); С var res = response; оповещение (резисторные [1]);

потому что здесь вы получите массив вместо объекта JSON. 2) Или вы можете передать ассоциативный массив здесь

$transposed_arr = array("c"=>"C", "Dbm"=>"Dbm","Bb" =>"Bb");
     json_encode($transposed_arr)

Ассоциативный массив создаст объект JSON, к которому можно применить

 var res = JSON.parse(response);
2 голосов
/ 02 июля 2019

Это либо потому, что вы анализируете уже проанализированный объект. Попробуйте удалить var res = JSON.parse(response); и изменить его на var res = response;

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