我在使用jQuery将数据从网页发布到servlet时遇到了一些问题。虽然我是一名经验丰富的Java开发人员,但我对javascript / jQuery / servlets非常陌生。我正在使用Eclipse,Apache Tomcat和Chrome。
我有一个XML文件(大小从6KB到30MB),我希望将其加载到浏览器中,修改,然后发布到servlet。
我的HTML有:
<input id="filechooser" type="file" onchange="readFile()">
我的JS有:
var file = document.getElementById('filechooser').files[0];
var reader;
reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = loaded;
function loaded(evt){
var result = evt.target.result;
var xml = $(result);
...
[make modifications to xml]
}
我在修改xml时使用的一些jQuery代码是$(xml).find("NODE").val()
和$(xml).find("OTHER_NODE").attr("attribute-name","newValue")
我现在需要将该xml发布到URL,它将用于处理某些信息。在Chrome控制台中,我可以查看xml对象的内容:
> xml
[<!--?xml version="1.0" encoding="ISO-8859-1"?-->,#text,
<root_element>...</root_element>]
> $(xml)
[<!--?xml version="1.0" encoding="ISO-8859-1"?-->,#text,
<root_element>...</root_element>]
> console.dir(xml)
jQuery.fn.jQuery.init[3]
0: #comment
1: #text
2: root_element
length: 3
__proto__: Object[0]
到目前为止,我的servlet是空的:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Post");
}
我创建了一个执行一些javascript的按钮。以下两个代码段都发布到服务器:
$.post("http://localhost:8080/MyWebApp/MyWebAppUrl", xml);
和
$.ajax({
type: "POST",
url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
data: xml
});
我的问题是,我不知道我是否正确发送XML,或者如何正确使用它。我需要对我的jQuery代码做些什么来正确发布它?如何从HttpServletRequest中获取它?如果我可以将xml文本作为String获取,我就知道如何在Java中操作它,并让它做任何我想做的事。
在网上搜索了10多个小时后,我仍然找不到答案。我确定它在那里,但我似乎无法连接点。
更新:
epascarello是发布XML文档的重点。但是,我正在错误地解析文档。请注意,我读取了该文件,然后存储了结果var xml = $(result)
。该文件被读作文本字符串,我正在将其转换为HTML文档。
我需要做的是var xml = jQuery.parseXML(result)
。这样,我就不必将其转换回文本字符串,并保持标记大写。
请注意,保持大写是至关重要的。
答案 0 :(得分:0)
设置内容类型
$.ajax({
type: "POST",
contentType: "application/xml", //or text/xml?
url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
data: xml
});
答案 1 :(得分:0)
将processData: false
添加到您的通话中,它应该只保留字符串...
$.ajax({
type: "POST",
contentType: "application/xml", //or text/xml?
url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
data: xml,
processData: false
});