Я добавил свойство к данным JSON, но я не могу получить доступ к данным на JS, которые он не показывает. Я не новичок в Ajax и JSON, но очевидно, что у меня все еще есть пробелы в моих знаниях, когда дело касается Ajax. Пожалуйста, помогите мне понять, как я могу добавить данные в свой ответ Ajax.
У меня это в классе контроллера PHP:
$x = '5';
if($request->ajax()){
return response()->json([
'total_questions' => $x,
'responseText' => $e->getMessage(),
], 500);
}
Я хочу получить доступ к свойству total_questions с помощью JS/JQuery.
Мой ответ JS AJAX здесь: console.log('errors ->', data.total_questions); - возвращает неопределенные
$.ajax({
type:"POST",
url: APP_URL+"selfEvaluation/save",
data:$(this).serialize(),
dataType: 'json',
success: function(data){
console.log(data);
},
error: function(data){
var errors = data.responseJSON;
console.log('data -> ', data);
console.log('errors -> ', data.total_questions);
if(data.status == 422){
// alert('422');
}
}
});
Это мой результат консоли
error: function(data){
является неправильной сигнатурой метода. См. Определение по адресу http://api.jquery.com/jquery.ajax/. Так должно быть
error: function(jqXHR, errorThrown, textStatus){
.
Вам нужно получить доступ к свойству jqXHR.responseJSON
. Так:
console.log('errors → ', jqXHR.responseJSON.total_questions);
Но я бы поставил под вопрос, почему вы возвращаете код статуса "500" для этого запроса, когда он кажется допустимым ответом. "500" означает "Внутренняя ошибка сервера", из-за чего сервер разбился, когда выяснилось, что этого не произошло. Если вы вернете статус "200" ("ОК"), ваш код ajax перейдет в "успешный" обратный вызов, и вы можете напрямую ссылаться на объект "данные" в обратном вызове, чтобы прочитать ваши данные.
попробуйте это, если вы получите ответ json из своего браузера.
if($request->ajax()){
$result = array(
'total_questions' => $x,
'responseText' => $e->getMessage(),
], 500);
}
echo json_encode($result);