在我的laravel项目中,我试图从控制器获取错误响应并显示在我的视图页面上。我已经添加了功能,但是在jQuery中得到了TypeError
。当我在控制台上打印响应数据时,显示控制台中响应消息。在这里,我添加了jquery,来自控制器和控制台消息的响应。任何帮助将不胜感激。
jquery
$.ajax({
type: "POST",
url: url,
data: $("form").serialize() + '&' + $.param({'formPart': $btn.val()}),
dataType: 'JSON'
})
.done(function (data){
$btn.button('reset');
if (data.response === 'success') {
window.location.href = '/test/url';
}
})
.fail(function(data, jqxhr, textStatus, error) {
if( data.status === 422 ) {
console.log(data);
var errors = data.responseJSON.error;
var bookingOrder = data.responseJSON.bookingOrder;
if(errors) {
$( "#errors_"+bookingOrder ).show();
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each( errors , function( key, value ) {
errorsHtml += '<li>' + value + '</li>';
});
errorsHtml += '</ul></div>';
$( "#errors_"+bookingOrder ).html( errorsHtml );
}
else {
var errData = data.responseJSON;
$.each(errData, function (i, item) {
var spliKey = i.split('.');
var fname = spliKey[0];
$('input[name^="' + fname + '" ]').each(function (k, v)
{
if (spliKey[1] == k) {
$(this).parent('.form-group').children('.help-block').html('<strong>' + item[0] + '</strong>');
$(this).parent('.form-group').addClass('has-error');
}
});
$('select[name^="' + fname + '" ]').each(function (k, v) {
if (spliKey[1] == k) {
$(this).parent('.form-group').children('.help-block').html('<strong>' + item[0] + '</strong>');
$(this).parent('.form-group').addClass('has-error');
}
});
});
$btn.button('reset');
}
}
});
来自laravel控制器的响应
if($monthBegin < $monthEnd) {
$test[] = $dateDifference->days;
}
else {
return response()->json(['error' => 'Arrival date should be less than departure date', 'bookingOrder' => 2], 422);
}
控制台 当我打印console.log(data)时。在控制台上显示响应
responseJSON: Object { error: "Arrival date should be less than departure date.", bookingOrder: 2 }
responseText: "{\"error\":\"Arrival date should be less than departure date.\",\"bookingOrder\":2}"
控制台中显示错误
TypeError: cannot use 'in' operator to search for 'length' in 'Arrival date sho...'
答案 0 :(得分:1)
这是工作中的小提琴:Fiddle。
问题在于迭代JSON对象
var错误= data.responseJSON.error;
您正在尝试迭代一个不是对象的值,因此将其修改为
var errors = data.responseJSON
$(document).ready(function(){
var data ='{"responseJSON":{"error":"Arrival date should be less than departure date.","bookingOrder":2}}';
var jsonData = JSON.parse(data);
console.log(jsonData.responseJSON.error);
var errors = jsonData.responseJSON;
var bookingOrder = jsonData.responseJSON.bookingOrder;
if(errors) {
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each( errors , function( key, value ) {
$("#errors").append(value);
});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="errors">
</div>
;