Я потрясен, обнаружив, что данные не анализируются при передаче в обратный вызов done
, когда вы полагаетесь на параметр dataType
(я повторил вашу проблему локально) в вашем примере. Это потому, что jQuery $.post
требует, чтобы вы передавали аргумент для параметра success
, если вы собираетесь включить параметр dataType
; см. ответ Адитьи Шармы с цитатой из документов об этом.
Вы все равно не должны полагаться на параметр dataType
; вместо этого ваш PHP должен возвращать правильный заголовок Content-Type
:
<!-- language: lang-php -->
<?php
header("Content-Type: application/json");
$arr = array('info1', 'info2', 'info3', 'info4');
echo json_encode($arr);
Если вы сделаете это, ваш $.post
вызов будет работать нормально ( без JSON.parse
вызова).
Если по какой-то причине вы не можете этого сделать, используйте обратный вызов успеха вместо done
(или передайте null
в качестве параметра success
и продолжайте использовать .done
); jQuery проанализирует JSON для вас из-за параметра "json"
:
<!-- language: lang-js -->
$.post("temp.php", {add: new_row}, function(data) {
// ...
}, "json");
// or
$.post("temp.php", {add: new_row}, null, "json").done(function(data) {
// ...
}, "json");
... а затем, опять же, нет необходимости в JSON.parse
вызове.
Но, опять же, лучше, если PHP правильно определит тип ответа.