[英]Returning a flash message for validation and succes from AJAX from submission using Laravel
经过研究后,我对使用JSON有所了解,但是我不确定流程。 下面的代码是我的AJAX控制台日志after.done当前不起作用,但是当我成功作为AJAX对象的一部分时它正在起作用。
AJAX
$(document).on('click', '#button', function() {
var wrap = $(this).closest('div.form_wrap');
wrap.find('form').each(function() {
var id = $(this).prop('id');
var arr = jQuery.makeArray( "#"+id );
var url = $(this).attr('action');
var type = $(this).attr('method');
var i = $('#'+id); // Or just $(this)
var data = i.serialize();
// setup on submit
i.submit(function(event) {
event.preventDefault();
var formElem = $(event.currentTarget);
console.log(data);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type : type,
url : url,
data : data,
dataType : 'json',
encode : true
})
.done(function(data) {
console.log(data);
});
});
i.submit();
});
});
控制者
public function store(Request $request)
{
//validate
$this->validate($request, array (
//'exercise' => 'required|unique:workout_goals,user_id,NULL,id,exercise,'.$request->exercise,
//'reps' => 'required|integer',
//'exercise' => 'required|unique:workout_goals,exercise,NULL,id,user_id,'.$request->user_id,
));
//store
$post = new workout_shared;
$post->date = $request->date;
$post->user_id = $request->user_id;
//$post->shared_id = $request->shared_id;
$post->exercise = $request->exercise;
$post->weight = Input::get( 'weight' );
$post->reps = $request->reps;
$post->sets = $request->sets;
//save
$post->save();
//session flash message
Session::flash('success','Workout shared!');
//redirect
return back();
}
谢谢
$ .done将仅在成功的ajax调用之后被调用,因此您在调用该URL时可能会收到错误。 使用$ .fail捕获此错误:
$.ajax(...)
.done(function(){ console.log("Done!"); })
.fail(function(jqXHR, textStatus, errorThrown){
console.log("Fail!", jqXHR, textStatus, errorThrown);
});
设置一个Session :: flash()将在下一个http请求的会话中存储此消息,要检索此消息,请在显示的下一页上使用此消息:
Session::pull(...)
但是,当您使用ajax进行调用时,您将需要像所说的那样将消息作为JSON返回。 我还建议使用类似方法来处理您的save方法,然后根据该方法的调用方式来实现即插即用消息或json:
...
// Save
$result = $post->save(); // return a boolean for success/fail
$message = $result ? "Workout shared!" : "Workout sharing failed!";
// Response
if ($request->ajax())
{
// Ajax response, will translate to JSON
return new Array(
'Success' => $result,
'Message' => $message
);
}
// Regular Http response
Session::flash('save-response', $message);
// Redirect
...
进一步的步骤是将这段代码的整个响应部分提取到一个新方法中,然后在验证后也可以使用它,例如:
WorkoutSaveResponse($result, $message)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.