jQuery находит ошибки в JSON ответе
Есть один клиентский скрипт, суть его такова:
Код:
$.post(
"url",
{data: data},
function (s_response)
{
if (s_response.response == "success")
alert("Успех");
else
alert("Что-то пошло не так :(");
},
"JSON"
);
"url",
{data: data},
function (s_response)
{
if (s_response.response == "success")
alert("Успех");
else
alert("Что-то пошло не так :(");
},
"JSON"
);
Код:
public function action_save_changes($arguments = NULL) {
$data = $this->model->save_changes(
$arguments['wp_title'], $arguments['wp_description'], $arguments['wp_id']
);
echo json_encode($data);
}
public function save_changes($wp_title, $wp_description, $wp_id) {
$resp['response'] = "success";
return $resp;
}
$data = $this->model->save_changes(
$arguments['wp_title'], $arguments['wp_description'], $arguments['wp_id']
);
echo json_encode($data);
}
public function save_changes($wp_title, $wp_description, $wp_id) {
$resp['response'] = "success";
return $resp;
}
UPD. Не, всё правильно. не знал, что в PHP json_encode() интерпретирует ассоциативные массивы как объекты.
А так без изменений попробовал твой код - всё работает, алерты правильные пишет, ошибок нет.
Да у меня тоже работало до определённого момента, а потом почему-то перестало. Даже не знаю, в чём может быть дело. Попробую обновить jQuery,
mfender, какой у тебя тип написан в заголовке ответа? У меня text/html, но что-то мне подсказывает, что там не хватает фразы json. Могу ошибаться, а проверить у себя не на чём — ничего не работает. :)
Могу ошибаться, но в ответе сервера не должно быть никакого json, а то браузер растеряется, и начнёт допытываться что с ним вообще делать.
На данный момент понял, что стандартный конвертер не может text перевести в json. Почему — не разберусь. Сразу по входу в конвертер бросается эксепшон. Вроде бы в js нет никаких компилируемых исходников, до которых я не мог бы добраться отладчиком, да? Если так, тогда я не понимаю, почему не удаётся вызвать функцию и войти в неё отладчиком, вместо чего бросается эксепшон.
Проблема решена. Баг находится в валидаторе, который использует jQuery. Откат на версию 1.8.0 решил проблему. Только неясно, почему ошибка проявилась так внезапно: пару дней назад всё работало и, вроде бы, только добавлял новый код, но не менял старый.