jQuery奇怪的JSON行为

jQuery weird JSON behaviour

本文关键字:JSON 行为 jQuery      更新时间:2023-09-26

我得到一个选定复选框的数组,并将它们推送到一个数组中。

之后,我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。

代码可能有什么问题。。。?

来源http://laravel.com/docs/4.2/requests:

注意:一些JavaScript库(如Backbone)可能会将输入发送到应用程序作为JSON。您可以通过输入访问这些数据:典型的

因此,在您的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'));
});

问题是,您在javascript代码中将数组编码为Json,您不必这样做,只需发送数组本身,Ajax调用就会为您编码。通过这样做,您将把数组编码为Json的两倍!用data: {_token: token, items: _items}, 替换data: {_token: token, items: JSON.stringify(_items)}

您想要序列化对象,而不是数组

更改您的代码:

var _items = {};

和类似的东西

$('input:checkbox:checked.item').each(function (i,v) {
    _items[i] = v;
});