Estoy pasando la matriz al controlador por ajax. El controlador está accediendo a la matriz y devuelve la respuesta correctamente. Pero quiero que cuando el controlador obtenga una matriz, devuelva una vista diferente (supongamos que A.blade.php) y puedo usar esa matriz en A.blade.php.
He visto muchas respuestas como use window.location="url" con success:function(){} pero solo irá a ver sin matriz.
El único propósito es pasar la matriz al controlador y el controlador devuelve otra vista con la matriz y no necesito una respuesta.
Función 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' }); }); });Controlador
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); }Rutas.web.php
Route::get('/suck',[ajaxcontroller::class,'getAjax']);Según sus comentarios, puede crear dinámicamente un formulario y agregar la matriz que desea a un elemento oculto. Luego envíe el formulario.
Código no probado:
$(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(); } ); } );Para enviar una matriz de la vista al controlador y del controlador a otra vista: primero cree un formulario y use el atributo onsubmit
<form id="myid" action="/go" method="post" onsubmit="submitForm(event)"> @csrf <input type="submit" value="submit"> </form>Luego escriba la función para 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>Rutas
Route::post('/go',[subcontroller::class,'getArray']);en el controlador
class subcontroller extends Controller { public function getArray(Request $req) { $arr=$req->get('myArray'); return view('viewName',['set'=>$arr]); } }En blade.view, acceda a la matriz como
@foreach($set as $item) <div>{{$item}}</div> @endforeachFuncionó para mí.