繁体   English   中英

将JavaScript数组从视图传递到Laravel控制器

[英]Passing JavaScript array from view to Laravel controller

我试图使用ajax将objs数组传递给Laravel控制器中的函数。 我没有在帖子后收到任何数据。

<script>

        var itemCount = 0;
        var objs=[];
        $(document).ready(function(){


            var temp_objs=[];

            $( "#add_button" ).click(function() {

                var html = "";

                var obj = {
                    "ROW_ID": itemCount,
                    "STREET_ADDRESS": $("#street_address").val(),
                    "CITY": $("#city").val(),
                    "ZIP": $("#zip").val()
                }

                // add object
                objs.push(JSON.stringify(obj));

                itemCount++;
                // dynamically create rows in the table
                html = "<tr id='tr" + itemCount + "'><td>" + obj['STREET_ADDRESS'] + "</td> <td>" + obj['CITY'] + " </td> <td>" + obj['ZIP'] + " </td><td><input type='button'  id='" + itemCount + "' value='remove'></td> </tr>";

                //add to the table
                $("#multiple_table").append(html)

                // The remove button click
                $("#" + itemCount).click(function () {
                    var buttonId = $(this).attr("id");
                    //write the logic for removing from the array
                    $("#tr" + buttonId).remove();
                });

            });

            $("#submit").click(function() {
                $.ajax({
                    url:'/app/Http/Controllers/Search/search_address',
                    type: 'POST',
                    dataType:'json',
                    contentType: 'application/json',

                    data: objs
                });

            });

        });



    </script>

在我的控制器功能是这样的

public function search_address(){
    $data = json_decode($_POST['data'], true);
    print_r($data);
}

我想我在ajax中的url有问题,我不确定如何获得控制器的url。

谢谢

你能改变:

$data = json_decode($_POST['data'], true);

至:

$data = json_decode(Input::get('data'));

并确保你有: use Input; 你的class extends Controller以上class extends Controller

看看是否有效。

编辑:还要确保您的路线(在Controllers文件夹中)正确。

你应该通过在你的ajax帖子中放入以下内容来console.log()你的javascript:

error : function(e){
   console.log(e);
}

然后,您可以在浏览器的开发人员工具面板中查看您遇到的错误。

您还应该知道,Laravel帖子需要一个csrf token除非您已明确关闭它们,这意味着您还需要将此令牌添加到您的帖子中。 所以你最终应该:

$("#submit").on('click', function() {
    $.ajax({
        url:'/app/Http/Controllers/Search/search_address', // Is this what you meant, is this the route you set up?
        type: 'POST',
        data: {'data': objs, '_token' : '<?=csrf_token()?>'},
        success : function(data){
          // Do what you want with your data on success
        },
        error : function(e){
           console.log(e);
        }
    });
});

请注意,我在javascript中嵌入了php ,这只是为了说明这一点。 理想情况下,javascript保存在自己的文件中,因此您需要找到一种方法来传递此令牌。 我个人使用knockoutjs来做这类事情( AngularJS也很受欢迎),但你可以很容易地做到这样的事情:

<input type="hidden" id="_token" value="{{ csrf_token() }}" />

在HTML中,然后从ajax请求中提取此值:

data: {'data': objs, '_token' : $('#_token').val()}

编辑

我刚注意到你的网址,看起来你正试图直接访问控制器。 您需要在routes.php文件中设置路由,例如:

Route::post('/searchAddress', 'YourController@search_address');

然后使用:

url: /searchAddress

在你的ajax请求中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM