【问题标题】:Send array to controller by Ajax call, then controller return another View with that array in Laravel通过 Ajax 调用将数组发送到控制器,然后控制器在 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 中的一个元素还是重定向浏览器?

标签: javascript php jquery ajax laravel


【解决方案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

它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多