Javascript 尝试在servlet中获取数组时获取null
下面是一组代码,用于获取数组中的表数据,并通过ajax调用将其传递给servlet。但是我正在变空。由于我不熟悉这个servlet和web应用程序,请有人帮助我了解我的错误/如何获取所需数据。到目前为止,我尝试了So中给出的一些示例。但我无法获得预期的数据Javascript 尝试在servlet中获取数组时获取null,javascript,java,jquery,servlets,Javascript,Java,Jquery,Servlets,下面是一组代码,用于获取数组中的表数据,并通过ajax调用将其传递给servlet。但是我正在变空。由于我不熟悉这个servlet和web应用程序,请有人帮助我了解我的错误/如何获取所需数据。到目前为止,我尝试了So中给出的一些示例。但我无法获得预期的数据 var myTableArray = []; $("table#itemtable tr").each(function() { var arrayOfThisRow = [];
var myTableArray = [];
$("table#itemtable tr").each(function() {
var arrayOfThisRow = [];
var tableData = $(this).find('td');
if (tableData.length > 0) {
tableData.each(function() { arrayOfThisRow.push($(this).text()); });
myTableArray.push(arrayOfThisRow);
}
});
alert(myTableArray);
$.ajax({
url:"insertmasteritem",
type:"POST",
dataType:'json',
data: {json:myTableArray},
success:function(data){
// codes....
},
});
Servlet代码
String[] myJsonData = request.getParameterValues("json[]");
System.out.println("myJsonData.length"+myJsonData.length);
for (int i = 0; i < myJsonData.length; i++) {
String[] innerArray=myJsonData[i].split(",");
System.out.println(myJsonData[i]);
}
String[]myJsonData=request.getParameterValues(“json[]”);
System.out.println(“myJsonData.length”+myJsonData.length);
for(int i=0;i
为什么将参数值作为JSON[]
String[] myJsonData = request.getParameterValues("json[]");
像这样发送Json数据
$.ajax({
url:"insertmasteritem",
type:"POST",
dataType:'json',
data:myTableArray,
success:function(data){
// codes....
},
});
在Servlet类中
JSONObject jsonObj= new JSONObject(request.getParameter("myTableArray"));
Iterator it = jsonObj.keys();
while(it.hasNext())
{
String jsonKey = (String)it.next();
String jsonValue = jsonObj.getString(jsonKey);
System.out.println(jsonKey + " --> " + jsonValue );
}
那么,您需要向servlet发送一个格式正确的JSON对象(作为字符串)。可能最简单的方法是创建一些javascript对象并用这些对象填充数组。然后,数组数据应该是 转换为JSON字符串(使用JSON.stringify)。我将对对象值进行硬编码(但您将从表中获取它们) Javascript代码
function generateJson(){
var myObjArr = [];
//you will typically have just one object (e.g. myObj, which you will fill in your ajax table loop
//myObj.v1 = v1_val;
//myObj.v2 = v2_val;
...
//myObjArr[i] = myObj; //
myObj1 = { "v1": "Orange", "v2": "ABC", "v3":10,"v4":"OK" };
myObj2 = { "v1": "Apple", "v2": "XYZ", "v3":25,"v4":"OK" };
myObjArr[0] = myObj1;
myObjArr[1] = myObj2;
var jsonObjStr = JSON.stringify(myObjArr);
//you can now use jsonObjStr to send your data to the servlet
// document.getElementById("json").innerHTML = jsonObjStr;//this is just added for testing purposes
}
生成的JSON
[{"v1":"Orange","v2":"ABC","v3":10,"v4":"OK"},{"v1":"Apple","v2":"XYZ","v3":25,"v4":"OK"}]
如您所见,json字符串以[(表示数组)开头。根据json解析器的工作方式({}表示对象),您可能必须将其更改为以{(和})开头
对于servlet部分,这取决于您使用的实际JSON解析器。请尝试使用其他人提供的一些建议。虽然我可以使用Jackson提供一些代码,但您必须将Jackson库添加到类路径中。S。当我使用缓冲区读取器而不是getparameter时,我收到如下消息。JSON%5B0%5D%5B%5D=1&JSON%5B0%5D%5B%5D=2604ssbt10x40 json字符串(myTableArray)在发送到servlet之前是什么样子的?@dsp_用户:我已经添加了该图像。请检查该图片上的文本看起来一点都不像json。我希望类似于{[{“var1”:“val1”,“var2”:“val2”,“var3”:“val3”},{“var1”:“val1”,“var2”,“var3”:“val3”}(例如,这个json包含2个对象,每个对象都有3个字段/属性/变量)@dsp_user:这是在stringify之前。我们也可以不带键传递吗?我想你不是在发送json,首先将数组解析成json,如var json=json.stringify(myTableArray);并发送此jsondata@Dillip:我尝试了你建议的解析方法。但即使在一行JSONObject jsonObj=new JSONObject(request.getParameter(“myTableArray”);我也遇到了空指针异常;这是因为我在传递I/p时也有空指针吗?你是用JavaScript还是java解析的?在JS var json=json.stringify(myTableArray)中;和使用的数据:json,在ajax中