2016-02-13 3 views
0

У меня есть PHP-скрипт, который используется для запроса POST, который возвращает (Echos) массив:Неожиданный маркер U при попытке разобрать массив JSON с AJAX

array(3) { 
    ["message"]=> 
    string(32) "The item was successfully saved" 
    ["newItemId"]=> 
    int(9) 
    ["newCustomFieldIds"]=> 
    string(3) "[9]" 
} 

Мой запрос AJAX:

$.ajax({ 
     url: 'updateItemDetails.php', 
     method: 'post', 
     data: { 
      ... 
     } 
    }).done(function(response) { 
      console.log(response); //correct 
      console.log(response['newCustomFieldIds']); //undefined 
      console.log(JSON.parse(response['newCustomFieldIds'])); //unexpected token u 
    }); 

Первый console.log производит:

{"message":"The item was successfully saved","newItemId":9,"newCustomFieldIds":"[9]"} 

, которое, как ожидалось. Однако второй дает undefined.

Итак, когда я JSON.parse, я получаю Uncaught SyntaxError: Unexpected token u! То, что я пытаюсь сделать, - получить "[9]" в реальном массиве, т.е. [9].

Я этого не понимаю. newCustomFieldIds определенно существует, потому что при регистрации response, я это вижу - так почему же не работает console.log(response['newCustomFieldIds'])?

ответ

2

Вы должны разобрать response:

JSON.parse(response).newCustomFieldIds 

Если вы хотите, чтобы преобразовать строку "[9]" в массив, вам нужно позвонить JSON.parse дважды:

JSON.parse(JSON.parse(response).newCustomFieldIds) 

Однако лучшее решение было бы кодировать значение newCustomFieldIds в качестве массива в первую очередь, то есть JSON должен содержать "newCustomFieldIds": [9].


Поскольку вы знаете, что response['newCustomFieldIds'] возвращается undefined, это не имеет смысла пытаться JSON.parse(response['newCustomFieldIds']). Это то же самое, что и JSON.parse("undefined"), но undefined недействителен JSON.

+0

hmmm теперь я получаю «Неожиданный токен a' ..!? (при двукратном анализе) –

+0

Тогда 'response' - это не то значение, которое вы утверждаете в нем: https://jsfiddle.net/bu63quzb/. Общее решение довольно просто: если у вас есть строка, содержащая JSON, вызовите 'JSON.parse'. Прочитайте [Access/process (вложенные) объекты, массивы или JSON] (https://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json), чтобы узнать больше о том, как обращаться к объектам в получите нужное значение. –

+0

http://i.stack.imgur.com/KhGY3.png - это то, что я вижу! –