以索引数组作为键字符串的 jQuery ajax 请求

Posted

技术标签:

【中文标题】以索引数组作为键字符串的 jQuery ajax 请求【英文标题】:jQuery ajax request with indexed array as key string 【发布时间】:2015-04-27 23:35:54 【问题描述】:

我提交了一个带有以下数据的 ajax 请求:

        $.ajax(
            type: 'POST',
            url: BASE_URL + '/api/get/filter/',
            cache: false,
            data: 
                'search': 
                    'foo[bar]': 'foo'
                ,
                'foo[bar]': 'foo'
            
        )

到目前为止一切顺利,数据已发送到服务器,但是当我返回 $_POST var 时,我得到以下结果:

$_POST: 
foo: 
    bar: "foo"
search: 
    foo[bar: "foo"

“search: foo[bar”有问题,不应该也是数组吗?

想法是禁用GET Form的提交,通过pushState通过Form参数更改URL而不重新加载网页,最后通过Ajax提交数据。这工作得很好,但是一旦我将这个数据发送到另一个数组键中,比如给定示例中的“搜索”,它就不起作用了。

更简单的问题: - 我有以下 URL(带有未知的获取参数):http://www.test.com/?foo[]=bar&foo[]=test&foo[bar][]=foo 如何使用 jQuery 获取所有 GET 参数并使用 Ajax 发送?

【问题讨论】:

【参考方案1】:

一个 json 数组如下所示:

[
     'foo': 
        'bar': 'foo'
        
    
]

这将使$foo['bar'] = foo

【讨论】:

【参考方案2】:

'foo[bar]'是不正确的javascript

无论如何,数组是一个对象,其索引是从 0 到数组长度的整数。 arr[52] 是一个数组,obj['string'] 是一个对象。

您应该使用正确的语法而不是依赖 jQuery(或服务器侦听器)来尝试理解您的代码:

$.ajax(
  type: 'POST',
  url: BASE_URL + '/api/get/filter/',
  cache: false,
  data: 
    'search': 
      'foo': 
        'bar': 'foo'
      
    ,
    'foo':  
      'bar': 'foo'
    
  
)

【讨论】:

【参考方案3】:

我找到了一个名为 $.deparam 的插件,它应该可以完成这项工作:https://github.com/chris-s-rogers/jquery-deparam

【讨论】:

以上是关于以索引数组作为键字符串的 jQuery ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章

以索引为键初始化对象数组[重复]

如何使用 jQuery 获取数组键?

字符串函数

jQuery 1.4.4+ AJAX 请求 - 发布空数组或对象变成字符串

如何在 JQuery 中添加和删除数组而不重新索引数组键

jQuery Ajax 调用返回 JSON 字符串而不是对象数组