繁体   English   中英

jQuery奇怪的JSON行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM