[英]jQuery weird JSON behaviour
我正在获取一组选定复选框,并将其推入数组。
之后,我对数组进行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。
代码有什么问题...?
问题是您正在使用JavaScript代码将数组编码为Json,而不必这样做,只需发送数组本身,Ajax调用便会为您编码。 这样,您就可以将数组编码为Json的两倍! 将data: {_token: token, items: JSON.stringify(_items)}
替换为data: {_token: token, items: JSON.stringify(_items)}
data: {_token: token, items: _items},
从http://laravel.com/docs/4.2/requests :
注意:某些JavaScript库(例如Backbone)可能会将输入作为JSON发送到应用程序。 您可以通过Input :: get正常访问此数据。
因此,在您的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'));
});
您要序列化对象,而不是数组
更改您的代码:
var _items = {};
像这样
$('input:checkbox:checked.item').each(function (i,v) {
_items[i] = v;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.