【问题标题】:jQuery post data to servletjQuery 将数据发布到 servlet
【发布时间】:2013-01-08 22:24:50
【问题描述】:

我在使用 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 的按钮。以下两个代码 sn-ps 都发布到服务器:

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

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

【问题讨论】:

    标签: javascript jquery xml ajax servlets


    【解决方案1】:

    设置内容类型

    $.ajax({
       type: "POST",
       contentType: "application/xml",  //or text/xml?
       url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
       data: xml
    });
    

    【讨论】:

    • 感谢您的回复。我尝试将内容类型设置为“application/xml”和“text/xml”,但都不起作用。我运行wireshark查看实际的post数据,看起来XML内容是:undefined=&amp;undefined=&amp;undefined=当我从请求中读取缓冲区时,它还包含"undefined=&amp;undefined=&amp;undefined="
    • 我发现了我的问题所在。我试图提交一个对象。我需要将它转换为这样的字符串:jQuery("div").append(xml.clone()).remove().html(); 创建一个
      对象,附加我的 xml 对象的克隆,然后将其转换为字符串。我将该字符串传递给我的 servlet,然后让 JDOM 完成剩下的工作。
    • 更正:jQuery("&lt;div&gt;").append(xml.clone()).remove().html(); 我忘了div 周围的&lt;&gt;。
    【解决方案2】:

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

    $.ajax({
       type: "POST",
       contentType: "application/xml",  //or text/xml?
       url: "http://localhost:8080/MyWebApp/MyWebAppUrl",
       data: xml,
       processData: false
    });
    

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2011-07-22
      • 2014-07-31
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 2012-12-06
      • 2018-11-22
      相关资源
      最近更新 更多