Php Laravel Ajax响应和错误处理
这是我的html文件的一部分Php Laravel Ajax响应和错误处理,php,ajax,laravel,response,Php,Ajax,Laravel,Response,这是我的html文件的一部分 <div class="form-group{{ $errors->has('address_name') ? ' has-error' : '' }}"> <label for="address_name">{{ trans('address.address_name') }} <span class="required_field">*</span></label> <inp
<div class="form-group{{ $errors->has('address_name') ? ' has-error' : '' }}">
<label for="address_name">{{ trans('address.address_name') }} <span class="required_field">*</span></label>
<input name="address_name" type="text" class="form-control" id="address_name" placeholder="{{ trans('address.address_name_placeholder') }}" maxlength="30">
@if($errors->has('address_name'))
<span class="help-block">{{ $errors->first('address_name') }}</span>
@endif
</div>
控制台消息
{"success":"false","errors":["The Address Name field is required.","The Recipient field is required.","The Address field is required."]}
我可以在控制台中看到错误,但是。在Blade中,我无法访问$errors。如何解决此问题?您可能正在尝试在不同的级别上工作。假设您没有在ajax脚本中处理错误响应,blade无法知道错误响应,因为html页面是由控制器按原样提供的,在下次刷新之前不会更改。如果您想让blade知道响应,您需要异步捕获它,即ajax级别。
假设您再次发布标准ajax请求,您可以执行以下操作:
var form = $('#your-form-id');
$.ajax({
url: form.attr( 'action' ),
type: 'POST',
data: form.serialize(),
success: function(data){
// Successful POST
// do whatever you want
},
error: function(data){
// Something went wrong
// HERE you can handle asynchronously the response
// Log in the console
var errors = data.responseJSON;
console.log(errors);
// or, what you are trying to achieve
// render the response via js, pushing the error in your
// blade page
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each( errors.error, function( key, value ) {
errorsHtml += '<li>'+ value[0] + '</li>'; //showing only the first error.
});
errorsHtml += '</ul></div>';
$( '#form-errors' ).html( errorsHtml ); //appending to a <div id="form-errors"></div> inside form
});
}
});
var form=$(“#您的表单id”);
$.ajax({
url:form.attr('action'),
键入:“POST”,
数据:form.serialize(),
成功:功能(数据){
//成功职位
//你想干什么就干什么
},
错误:函数(数据){
//出了点问题
//在这里,您可以异步处理响应
//登录控制台
var errors=data.responseJSON;
console.log(错误);
//或者,你想要实现什么
//通过js呈现响应,将错误推送到
//刀片页
errorsHtml='';
$.each(errors.error,函数(键,值){
errorsHtml+='- '+值[0]+'
';//仅显示第一个错误。
});
errorsHtml+='
';
$(“#表单错误”).html(errorsHtml);//附加到内部表单
});
}
});
请注意,您需要在您的发布表单中添加一个
#表单错误div,以使其正常工作。希望这对您有所帮助
$.ajax({
url: form.attr( 'action' ),
type: 'POST',
data: form.serialize(),
success: function(data){
// do whatever you want
},
error: function(data){
// Log in the console
var errors = data.responseJSON;
console.log(errors);
// or, what you are trying to achieve
// render the response via js, pushing the error in your
// blade page
var errors = response.responseJSON;
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each(errors.errors,function (k,v) {
errorsHtml += '<li>'+ v + '</li>';
});
errorsHtml += '</ul></di>';
$( '#error_message' ).html( errorsHtml );
//appending to a <div id="error_message"></div> inside your form
});
}
});
$.ajax({
url:form.attr('action'),
键入:“POST”,
数据:form.serialize(),
成功:功能(数据){
//你想干什么就干什么
},
错误:函数(数据){
//登录控制台
var errors=data.responseJSON;
console.log(错误);
//或者,你想要实现什么
//通过js呈现响应,将错误推送到
//刀片页
var errors=response.responseJSON;
errorsHtml='';
$.each(错误、错误、函数(k、v){
errorsHtml+='- '+v+'
';
});
errorsHtml+='
';
$('error#u message').html(errorsHtml);
//附加到窗体内部的
});
}
});
以下是更简洁的解决方案。快乐黑客:)
.fail((err)=>{
让allErrors=Object.values(err.responseJSON)
.map(el=>(
el=`${el} `
))
.减少((下一个,上一个)=>(下一个=上一个+下一个));
常量设置错误=`
${allErrors}
`;
$('.modalerror').html(setErrors);
})
.始终((数据)=>{
});
“”+值[0]+” ;你为什么喜欢那样?我们需要价值[关键]ithink@CihanKüsmez yea,键
如果出现多个错误。我确实指定它只显示一个错误,我相信这取决于您的需要。$.each(数据,函数(键,值){应该是$.each(errors.errors,函数(键,值){这是Laravel 5+的解决方案。谢谢。
$.ajax({
url: form.attr( 'action' ),
type: 'POST',
data: form.serialize(),
success: function(data){
// do whatever you want
},
error: function(data){
// Log in the console
var errors = data.responseJSON;
console.log(errors);
// or, what you are trying to achieve
// render the response via js, pushing the error in your
// blade page
var errors = response.responseJSON;
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each(errors.errors,function (k,v) {
errorsHtml += '<li>'+ v + '</li>';
});
errorsHtml += '</ul></di>';
$( '#error_message' ).html( errorsHtml );
//appending to a <div id="error_message"></div> inside your form
});
}
});
.fail((err) => {
let allErrors = Object.values(err.responseJSON)
.map(el => (
el = `<li>${el}</li>`
))
.reduce((next, prev) => ( next = prev + next ));
const setErrors = `
<div class="alert alert-danger" role="alert">
<ul>${allErrors}</ul>
</div>
`;
$('.modalErrorr').html(setErrors);
})
.always((data) => {
});