我正在获取所选复选框的数组,并将它们推入数组中。
之后,我会将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。
密码有什么问题.?
发布于 2014-10-29 15:10:46
来自http://laravel.com/docs/4.2/requests
注意:一些JavaScript库(如主干)可能以JSON的形式向应用程序发送输入。您可以通过输入::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'));
});发布于 2014-10-29 13:32:41
问题是在javascript代码中将数组编码给Json,您不必这样做,只需发送数组本身,Ajax调用将为您编码它。通过这样做,您将将数组编码两次给Json!用data: {_token: token, items: JSON.stringify(_items)}替换data: {_token: token, items: _items},
发布于 2014-10-29 13:25:24
您希望序列化对象,而不是数组。
更改您的代码:
var _items = {};像这样的事情
$('input:checkbox:checked.item').each(function (i,v) {
_items[i] = v;
});https://stackoverflow.com/questions/26630353
复制相似问题