2

jQueryを使用してWebページからサーブレットにデータを投稿する際に問題が発生しました。私は経験豊富なJava開発者ですが、javascript / jQuery/servletsは非常に初めてです。Eclipse、Apache Tomcat、およびChromeを使用しています。

ブラウザにロードして変更し、サーブレットに投稿したいXMLファイル(サイズは6KBから30MB)があります。

私の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).find("NODE").val()xmlの変更に使用するjQueryコードは次のとおりです。$(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]

これまでのところ、サーブレットは空です。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   System.out.println("Post");
}

javascriptを実行するボタンを作成しました。次の2つのコードスニペットは両方ともサーバーに投稿されます。

$.post("http://localhost:8080/MyWebApp/MyWebAppUrl", xml);

と:

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

私の問題は、XMLを正しく送信しているかどうか、またはXMLを適切に使用する方法がわからないことです。jQueryコードを正しく投稿するには、何をする必要がありますか?HttpServletRequestからそれを取得するにはどうすればよいですか?xmlテキストを文字列として取得できる場合は、Javaでそれを操作する方法を正確に知っており、必要な処理を実行できます。

Webを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 に答える