![](/img/trans.png)
[英]How to return a view from laravel controller function upon ajax call?
[英]Laravel 5.2 - Return view from controller after ajax request
我有一个javascript函数,它向控制器发送一些信息(通常是数组和ID之类的vars)以插入表中,问题是插入完成后,我想返回到具有数据数组的其他视图,我无法似乎这样做(我认为是因为ajax请求)
JavaScript代码
$('#importar').submit(function(e) {
e.preventDefault();
fdata=preparePostData();
$.ajax({
type:'POST',
url: $(this).prop('action'), // url, from form
data:fdata,
processData: false,
contentType: false,
success:function(data) {
window.location.replace(data.url);
}
});
}); // end form.submit
函数准备PostData()
var file_data=$('input:file')[0].files;
var postdata=new FormData();
postdata.append('_token',token);
postdata.append('startFrom',startFrom);
postdata.append('idList',idList);
postdata.append('nomeCampos',nomeCampos);
postdata.append('posicaoCampos',posicaoCampos);
postdata.append('file',file_data[0]);
return postdata;
控制器期望代码请执行所有插入和功能,最后
$data = array('listNome' => $listName, 'contacts' => $contacts, 'errors' => $erro);
return view("XPTO", $data);
您不应该通过ajax调用返回视图,因为您将获得视图处理后的代码作为ajax回调的参数。 将ajax调用视为对服务器的“幕后”调用的异步,您可以在其中传递参数并获取其他一些参数
相反,您应该从控制器返回JSON响应,其中包含从JS调用路由所需的所有参数,并在success
回调中对其进行解析。 例如:
控制者
//here you should store all the parameters you need in your JS calback
$data = array('status' => 'ok', 'url' => $redirect_url );
JS
success:function(data)
{
//data will contain the parameters you set in the controller, so you can use them to call the route
if ( data.status == 'ok' )
window.location.replace(data.url);
}
只是详细说明了先前的答案,Ajax调用控制器用于在后台提供一些数据,而标准控制器用于控制视图,因此最佳实践是将Ajax控制器的数据(JSON)返回到请求数据的同一视图。 而应该使用标准控制器来控制视图。
解决了
不是最优雅的解决方案,但是我所做的是将带有错误的数组设置为会话变量,并在我需要的特定控制器中获取该会话var。
控制者
$request->session()->put('importErrors',$erro);
$response = array('status' =>'success','url' => '/ListarContactos/'.$idList);
return response()->json($response);
的JavaScript
$('#importar').submit(function(e) {
e.preventDefault();
fdata=preparePostData();
$.ajax({
type:'POST',
url: $(this).prop('action'), // url, from form
data:fdata,
processData: false,
contentType: false,
success:function(data) {
if(data.status=='success'){
window.location.replace(data.url);
}
}
});
}); // end form.submit
XPTOController
$errorArray= $request->session()->get('importErrors');
使用它之后,您可以销毁会话变量或保留它(取决于您是否需要它)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.