我正在获取所选复选框的数组并将它们推入数组。
之后我JSON.stringify()
数组并将其发送到我的PHP脚本。
但奇怪的是,当我发送数组变量时,它会返回奇怪的东西。
以下是代码:
var _items = new Array();
$('input:checkbox:checked.item').each(function () {
_items.push($(this).val());
});
$.ajax({
type: 'POST',
url: btn.data('url'),
data: {_token: token, items: JSON.stringify(_items)},
dataType: 'json',
success: function () {
//
}
})
当我在控制台上记录`_items变量时,我得到一个带有所选框的数组:
["3", "4"]
在我的PHP中我做了:
dd(json_decode(Input::get('items')));
但奇怪的是_items
变量在我的PHP脚本中返回一个数组:
0: 2
1: 0
2: 3
3: 1
4: 1
5: 4
6: 1
当我像这样手动创建_items
变量时:var _items = ["3", "4"];
它确实返回正确的数组..
编辑:当我尝试将其作为数组发送时,它将返回与上面strange thing
相同的结果..
EDIT2:我打印PHP数组的代码。我用laravel捕获路径(这是应该的工作)然后我死了并转储(dd)输入。与$_POST['items']
相同:
Route::post('user/destroy/multiple', function () {
dd(json_decode(Input::get('items')));
});
EDIT3:奇怪的是,当我输出Input::get('items')
它确实返回一个JSON字符串时,但由于某种原因我不能json_decode它..
代码有什么问题......?
答案 0 :(得分:1)
问题是您在javascript代码中将数组编码为Json,您不必这样做,只需发送数组本身,Ajax调用将为您编码。通过这样做,您将数组编码两次到Json!将data: {_token: token, items: JSON.stringify(_items)}
替换为data: {_token: token, items: _items},
答案 1 :(得分:1)
来自http://laravel.com/docs/4.2/requests:
注意:某些JavaScript库(如Backbone)可能会向其发送输入 应用程序作为JSON。您可以通过Input :: get like访问此数据 正常。
因此,在JavaScript中,您应该执行以下操作:
$.ajax({
type: 'POST',
url: btn.data('url'),
data: {_token: token, items: _items},
dataType: 'json',
success: function () {
//
}
})
在PHP中你应该这样做:
Route::post('user/destroy/multiple', function () {
dd(Input::get('items'));
});
答案 2 :(得分:0)
您想序列化对象,而不是数组
更改您的代码:
var _items = {};
和类似的东西
$('input:checkbox:checked.item').each(function (i,v) {
_items[i] = v;
});