首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery怪异的JSON行为

jQuery怪异的JSON行为
EN

Stack Overflow用户
提问于 2014-10-29 12:27:20
回答 3查看 319关注 0票数 1

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

之后,我会将JSON.stringify()数组发送到我的PHP。

但奇怪的是,当我发送数组变量时,它会返回奇怪的内容。

以下是代码:

代码语言:javascript
复制
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变量时,我会得到一个数组,其中的选定框如下所示:

代码语言:javascript
复制
["3", "4"]

在我的PHP中,我需要:

代码语言:javascript
复制
dd(json_decode(Input::get('items')));

但奇怪的是,_items变量在我的PHP脚本中返回一个数组:

代码语言:javascript
复制
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']相同

代码语言:javascript
复制
Route::post('user/destroy/multiple', function () {
    dd(json_decode(Input::get('items')));
});

EDIT3:奇怪的事情是,当我输出Input::get('items')时,它确实返回了一个JSON字符串,但由于某些原因,我无法将其json_decode。

密码有什么问题.?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-29 15:10:46

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

注意:一些JavaScript库(如主干)可能以JSON的形式向应用程序发送输入。您可以通过输入::get来访问这些数据。

因此,在您的JavaScript中,您应该执行以下操作:

代码语言:javascript
复制
$.ajax({
   type: 'POST',
   url: btn.data('url'),
   data: {_token: token, items: _items},
   dataType: 'json',
   success: function () {
    //
   }
})

在PHP中,您应该这样做:

代码语言:javascript
复制
Route::post('user/destroy/multiple', function () {
    dd(Input::get('items'));
});
票数 1
EN

Stack Overflow用户

发布于 2014-10-29 13:32:41

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

票数 1
EN

Stack Overflow用户

发布于 2014-10-29 13:25:24

您希望序列化对象,而不是数组。

更改您的代码:

代码语言:javascript
复制
var _items = {};

像这样的事情

代码语言:javascript
复制
$('input:checkbox:checked.item').each(function (i,v) {
    _items[i] = v;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26630353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档