通过 Ajax 调用将数组发送到控制器,然后控制器在 Laravel 中返回具有该数组的另一个视图
Posted
技术标签:
【中文标题】通过 Ajax 调用将数组发送到控制器,然后控制器在 Laravel 中返回具有该数组的另一个视图【英文标题】:Send array to controller by Ajax call, then controller return another View with that array in Laravel 【发布时间】:2021-11-21 12:41:36 【问题描述】:我通过 ajax 将数组传递给控制器。控制器正在访问数组并成功返回响应。但我希望当控制器获取数组时它返回不同的视图(假设 A.blade.php),我可以在 A.blade.php 中使用该数组。
我看到很多回复,比如在success:function()
中使用window.location="url"
,但它只会在没有数组的情况下进入查看。
唯一的目的是将数组传递给控制器,控制器返回另一个带有数组的视图,我不需要响应。
AJAX 函数
$(function()
$('#but').click(function()
alert("Button Click");
;
$.ajax(
type: 'get',
url: '/suck',
data: arr,
success: function( data )
document.getElementById("p").innerhtml =data;
,
error: function(xhr, status, error)
alert(error);
,
dataType: 'text'
);
);
);
控制器
public function getAjax(Request $req)
$input=$req->all();
// Here I want when controller access array it return another view with array and no need of response
return response()->json($input);
Routes.web.php
Route::get('/suck',[ajaxcontroller::class,'getAjax']);
【问题讨论】:
也许 Ajax 类型应该是 POST 而不是 GET? 我可以将 ajax 类型更改为 POST 但它不会解决问题。 你确定没有相同url/suck
的路由吗?
上面提到了完整的必需代码。确保 /suck
在 routes.web.php 中。
@MuteebZafar 不确定我理解。您只想更新 DOM 中的一个元素还是重定向浏览器?
【参考方案1】:
根据您的 cmets,您可以动态创建一个表单并将您想要的数组添加到隐藏元素中。然后提交表单。
未经测试的代码:
$(function()
$('#but').click (
function()
var myArray = [];
var myJson = JSON.stringify(myArray);
var myForm = $(document.createElement('form'));
$(myForm).attr("action", "/url/to/controller");
$(myForm).attr("method", "POST");
var input = $("<input>").attr("type", "hidden").attr("name", "myArray").val(myJson);
$(form).append($(input));
$(form).submit();
);
);
【讨论】:
这不起作用,因为表单没有提交。但它帮助我解决了我的问题。【参考方案2】:要将数组从视图发送到控制器并从控制器发送到其他视图: 首先创建一个表单并使用onsubmit属性
<form id="myid" action="/go" method="post" onsubmit="submitForm(event)">
@csrf
<input type="submit" value="submit">
</form>
然后为onsubmit编写函数
<script type="text/javascript">
function submitForm(event)
var arr=["Tile","Desk","Door"]; // Array which has to pass to controller
var i;
for(i=0;i<arr.length;i++) // create and append arr.length times
var input = $("<input>").attr("type", "hidden").attr("name", "myArray["+i+"]").val(arr[i]);
$(myid).append($(input)); // append to form
this.submit();
</script>
路线
Route::post('/go',[subcontroller::class,'getArray']);
在控制器中
class subcontroller extends Controller
public function getArray(Request $req)
$arr=$req->get('myArray');
return view('viewName',['set'=>$arr]);
在blade.view中,访问数组为
@foreach($set as $item)
<div>$item</div>
@endforeach
它对我有用。
【讨论】:
以上是关于通过 Ajax 调用将数组发送到控制器,然后控制器在 Laravel 中返回具有该数组的另一个视图的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ajax 以数组格式将多个图像从 MVC 视图发送到控制器?
将带有香草 Js 的数组从 Ajax 发送到 Laravel 控制器