Javascript 如何将数组作为(jquery)ajax请求的一部分发送

Javascript 如何将数组作为(jquery)ajax请求的一部分发送,javascript,jquery,ajax,arrays,servlets,Javascript,Jquery,Ajax,Arrays,Servlets,我尝试将数组作为ajax请求的一部分发送,如下所示: var query = []; // in between I add some values to 'query' $.ajax({ url: "MyServlet", data: query, dataType: "json", success: function(noOfResults) { alert(noOfResults); } }); } var query = [

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

var query = [];
// in between I add some values to 'query'
$.ajax({
    url: "MyServlet", 
    data: query,
    dataType: "json",  
    success: function(noOfResults) { 
    alert(noOfResults); 
    }
  });
}
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);
    }
  });
}
我想看看我从servlet中得到了什么,所以我使用了这一行:

System.out.println(request.getParameterMap().toString());
返回的
{}
表示一个空映射

Firebug告诉我收到一个
400错误请求
错误

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


编辑:我在发送数据之前使用了.serializeArray()(jQuery)函数。我没有收到400,但是没有任何有用的东西被发送出去。

你必须先发送一个对象,然后用JSON.stringify进行stringify

像这样:

var query = [];
// in between I add some values to 'query'
$.ajax({
    url: "MyServlet", 
    data: query,
    dataType: "json",  
    success: function(noOfResults) { 
    alert(noOfResults); 
    }
  });
}
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.stringify对其进行stringify

像这样:

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

只需尝试以名称/值对的形式发送数据(这是预期的)。像

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

query => Array ( [0] => data1 [1] => data2 )
根据jQuery文档中的
data
设置
jQuery.Ajax()
方法

如果值是数组,则jQuery 用相同的值序列化多个值 基于 传统环境


只需尝试以名称/值对的形式发送数据(这是预期的)。像

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

query => Array ( [0] => data1 [1] => data2 )
根据jQuery文档中的
data
设置
jQuery.Ajax()
方法

如果值是数组,则jQuery 用相同的值序列化多个值 基于 传统环境



query
包含什么?(字符串/对象?)。如果将数组传递给
数据
,jQuery假定它的格式为:
[{name:'name',value:'Jim'},{name:'age',value:'20'}]
。每个数组值都应该是另一个对象数组-但现在我只想得到一个简单的示例,类似于您在那里看到的。
查询
包含什么?(字符串/对象?)。如果将数组传递给
数据
,jQuery假定它的格式为:
[{name:'name',value:'Jim'},{name:'age',value:'20'}]
。每个数组值都应该是另一个对象数组-但现在我只想用一个简单的例子来说明,与您的类似。请注意,并非所有浏览器都包含
JSON
库。您应该包括
json2
库:我不知道这一点。非常感谢你!它似乎不起作用。但这可能是由于其他地方的错误。我将尝试这里建议的方法,我应该更频繁地刷新我的浏览器!感谢MattI应该添加的额外信息,一旦包含了json2.js文件,它就可以正常工作。请注意,并非所有浏览器都包含
JSON
库。您应该包括
json2
库:我不知道这一点。非常感谢你!它似乎不起作用。但这可能是由于其他地方的错误。我将尝试这里建议的方法,我应该更频繁地刷新我的浏览器!感谢MattI应该添加的额外信息,一旦包含了json2.js文件,它就可以正常工作。如果
data
参数不是字符串,jQuery将使用
jQuery.param
方法对其进行序列化;如果
jQuery.param
接收到数组,则该数组必须是.serializeArray()返回格式的对象数组。(
[{name:“first”,value:“Rick”},{name:“last”,value:“Astley”},{name:“job”,value:“Rock Star”}]
);感谢您的澄清,如果
数据
参数不是字符串,jQuery将使用
jQuery.param
方法对其进行序列化;如果
jQuery.param
接收到数组,则该数组必须是.serializeArray()返回格式的对象数组。(
[{name:“first”,value:“Rick”},{name:“last”,value:“Astley”},{name:“job”,value:“Rock Star”}]
);谢谢你的澄清,马特