【问题标题】:How do you send an array as part of an (jquery) ajax request你如何发送一个数组作为(jquery)ajax请求的一部分
【发布时间】:2011-06-07 01:58:40
【问题描述】:

我尝试发送一个数组作为 ajax 请求的一部分,如下所示:

var query = [];
// in between I add some values to 'query'
$.ajax({
    url: "MyServlet", 
    data: query,
    dataType: "json",  
    success: function(noOfResults) { 
    alert(noOfResults); 
    }
  });
}

我想看看我在 servlet 中得到了什么,所以我使用了这一行:

System.out.println(request.getParameterMap().toString());

返回的{} 暗示了一张空地图。

Firebug 告诉我收到 400 bad request 错误

如果我将attribute=value 之类的查询字符串作为“数据”发送,那么一切正常,因此它与无法按原样发送数组有关。我必须做些什么才能将该数据放入 servlet 以进行进一步处理。如果可以避免的话,我不想把它拉出来并在JS中变成一个queryString。

编辑: 我在发送数据之前使用了 .serializeArray() (jQuery) 函数。我没有收到 400,但没有发送任何有用的信息。

【问题讨论】:

  • query 包含什么? (字符串/对象?)。如果您将数组传递给data,jQuery 会假定它的格式为:[{ name: 'name', value: 'Jim' },{ name: 'age', value: '20' }]
  • 每个数组值都应该是另一个对象数组 - 但现在我只是想让一个简单的例子起作用,类似于你那里的例子。

标签: javascript jquery ajax arrays servlets


【解决方案1】:

尝试将数据作为名称/值对发送(这是预期的)。喜欢

var query = ["data1","data2"];
// in between I add some values to 'query'
$.ajax({
    url: "MyServlet", 
    data: {'query' : query},
    success: function(noOfResults) { 
    alert(noOfResults); 
    }
  });
}

你应该像这样在服务器端获取数据

query => Array ( [0] => data1 [1] => data2 )

根据data 设置jQuery.Ajax() 方法的jQuery 文档

如果 value 是一个数组,jQuery 序列化多个相同的值 基于值的键 传统设置

【讨论】:

  • 如果data参数不是字符串,jQuery使用jQuery.param方法对其进行序列化;如果jQuery.param 接收到一个数组,它必须是一个由.serializeArray() 返回的格式的对象数组。 ([{name:"first",value:"Rick"}, {name:"last",value:"Astley"}, {name:"job",value:"Rock Star"}]); api.jquery.com/jQuery.param
  • 感谢马特的澄清
【解决方案2】:

您必须发送一个您首先使用 JSON.stringify 进行字符串化的对象。

像这样:

var query = [];
// in between I add some values to 'query'
$.ajax({
    url: "MyServlet",
    data: JSON.stringify({ nameParameter: query })
    dataType: "json",
    success: function(noOfResults) {
        alert(noOfResults);
    }
  });
}

【讨论】:

  • 请注意,并非所有浏览器都包含JSON 库。您应该包含 json2 库:github.com/douglascrockford/JSON-js
  • 我不知道这个。非常感谢!
  • 它似乎不起作用。但这可能是由于其他地方的错误。我将尝试这里建议的方法stackoverflow.com/questions/191881/…
  • 我应该更频繁地刷新我的浏览器!感谢马特提供的额外信息
  • 我应该补充一点,一旦包含 json2.js 文件,它就可以正常工作了。
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多