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

7

我正在尝试使用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。

谢谢


请在开发者工具中检查网络选项卡。 - Rayon
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Vishal
暂时不要考虑JavaScript/AJAX...你能用HTML/PHP/Laravel构建一个符合你要求的表单吗?我想先确保你的控制器和路由是否正常工作。 - Ayman Safadi
嘿,Sajan。这个有进展了吗? - Ayman Safadi
2个回答

1

你能改变吗:

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

to:

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

请确保你的 class extends Controller 之前有 use Input;
看看是否有效。
编辑:还要确保你的路由(在Controllers文件夹中)是正确的。

不是 Input::get,我目前正在使用 Laravel 进行项目开发,这是我们的做法。 - Maarten
我不知道为什么或者如果$_POST在Laravel项目中不起作用,因为我从未在其中使用过,只是举了一个从ajax调用中获取数据的例子。 - Maarten

0

你应该在ajax post中加入以下代码: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);
        }
    });
});

请注意,我已经将php嵌入到javascript中,这只是为了说明问题。理想情况下,javascript应该保留在自己的文件中,因此您需要找到一种传递此令牌的方法。我个人使用knockoutjs来处理这种类型的事情(AngularJS也很受欢迎),但您可以轻松地执行以下操作:
<input type="hidden" id="_token" value="{{ csrf_token() }}" />

在你的HTML中,然后在你的ajax请求中获取这个值。
data: {'data': objs, '_token' : $('#_token').val()}

编辑

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

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

然后使用:

url: /searchAddress

在你的ajax请求中。


我尝试了你的建议,但仍然不起作用。还有其他需要注意的事情吗? - Sajan Silwal
你在浏览器的JavaScript控制台中得到了什么结果?另外,你是否检查过日志文件以查看是否有任何错误被抛出? - craig_h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接