2

我在使用 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 文本作为字符串获取,我就确切地知道如何在 Java 中操作它,并让它做任何我想做的事情。

在网上搜索了 10 多个小时后,我仍然找不到答案。我确定它就在那里,但我似乎无法将这些点联系起来。

更新:

epascarello 因发布 XML 文档而脱颖而出。但是,我错误地解析了文档。

请注意,我读取了文件,然后存储了结果var xml = $(result)。该文件被读取为文本字符串,我将其转换为 HTML 文档。

我需要做的是var xml = jQuery.parseXML(result)。这样,我不必将其转换回文本字符串,并且标记大写保持不变。

请注意,保持大小写非常重要。

4

2 回答 2

0

设置内容类型

$.ajax({
   type: "POST",
   contentType: "application/xml",  //or text/xml?
   url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
   data: xml
});
于 2013-01-25T01:01:52.127 回答
0

添加processData: false到您的通话中,它应该不理会字符串...

$.ajax({
   type: "POST",
   contentType: "application/xml",  //or text/xml?
   url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
   data: xml,
   processData: false
});
于 2013-04-16T23:51:56.093 回答