将 JavaScript 数组从视图传递到 Laravel 控制器
Posted
技术标签:
【中文标题】将 JavaScript 数组从视图传递到 Laravel 控制器【英文标题】:Passing JavaScript array from view to Laravel controller 【发布时间】:2016-01-21 11:08:12 【问题描述】:我正在尝试使用 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。
谢谢
【问题讨论】:
在开发者工具中检查网络标签.. 你的 ajax 加载了吗?你检查过你的浏览器控制台看是否有任何错误被抛出? 暂时忘掉 javascript/AJAX... 你能用 HTML/php/Laravel 构建一个表单来做你想做的事吗?我想确保你的控制器和路由首先工作。 嘿萨扬。这方面有什么进展吗? 【参考方案1】:你应该console.log()
你的javascript,在你的ajax帖子中放置以下内容:
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 请求中。
【讨论】:
我试过你的建议,还是不行。还有什么我需要注意的吗? 您在浏览器的 javascript 控制台中得到了什么结果?另外,您是否检查过您的日志以查看是否抛出了任何错误?【参考方案2】:你能改变吗:
$data = json_decode($_POST['data'], true);
到:
$data = json_decode(Input::get('data'));
并确保您有:use Input;
在您的 class extends Controller
上方
看看这是否有效。
编辑:还要确保您的路线(在 Controllers 文件夹中)是正确的。
【讨论】:
不,Input::get
,我目前正在与 Laravel 合作一个项目,我们就是这样做的。
我不知道为什么或是否 $_POST 不起作用,因为我从未在 Laravel 项目中使用过它,我只是举例说明了我如何从 ajax 调用中获取数据。以上是关于将 JavaScript 数组从视图传递到 Laravel 控制器的主要内容,如果未能解决你的问题,请参考以下文章