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

时间:2015-02-25 19:40:18

标签: javascript jquery ajax

我提交了一个包含以下数据的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"

"搜索:foo [bar",不应该这也是一个数组吗?

这个想法是禁用GET表单的提交,通过pushState通过Form参数更改URL而不重新加载网页,最后通过Ajax提交数据。这种方法很有效,但是只要我将这些数据发送到另一个数组键中,它就不会起作用,例如" search"在给定的例子中。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

json数组看起来像这样:

[
    { 'foo': {
        'bar': 'foo'
        }
    }
]

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