jQuery将数据发布到servlet

时间:2013-01-25 00:55:11

标签: javascript jquery xml ajax servlets

我在使用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)。这样,我就不必将其转换回文本字符串,并保持标记大写。

请注意,保持大写是至关重要的。

2 个答案:

答案 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
});