jQuery奇怪的JSON行为

时间:2014-10-29 12:27:20

标签: javascript php jquery json laravel

我正在获取所选复选框的数组并将它们推入数组。

之后我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它..

代码有什么问题......?

3 个答案:

答案 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;
});