我正在尝试使用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。
谢谢
答案 0 :(得分:0)
你可以改变:
$data = json_decode($_POST['data'], true);
为:
$data = json_decode(Input::get('data'));
并确保您use Input;
class extends Controller
看看是否有效。
修改:还要确保您的路线(在控制器文件夹中)正确无误。
答案 1 :(得分:0)
你应该通过在ajax帖子中添加以下内容来console.log()
你的javascript:
error : function(e){
console.log(e);
}
然后,您可以看到您在浏览器中遇到了哪些错误&#39;开发人员工具面板。
您还应该知道,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请求中。