
お世話になります。
jQuery1.9.1でajaxを使用したいのですが、表題の通りresponse受信時の処理が動かず困っています。
(下記コード抜粋で"test2"が表示されません。)
自分でも調べてはいるつもりですが、知識不足で何をどう調べた物かも分からず成果が上がらないため、何か助言を頂ければと思い投稿致します。
<問題>
jQueryを使用してajax通信を行うコードがあるが、
サーブレットからの応答受信時の処理が実行されない。
<備考>
・同じソースコードを使用し、正常に動作する環境もあるため、
プログラム上のバグではなく環境構築の問題と思われる。
・今日までjavaとjavaScriptの区別もつかなかった人間(私ですが)が環境構築しているので、
初歩の初歩でポカをやらかしている可能性は十分あり。
・ajaxによるリクエスト送信とサーブレット側は動くことをデバッガで確認済み。
<環境>
windows7
apache-tomcat 7.0.42
JDK 7u25
eclipse Java EE IDE(ver: kepler release / build id:20130614-0229)
jQuery 1.9.1
jQuery-ui 1.10.3
<コード抜粋>
・java script側
<script src="//code.jquery.com/jquery-1.9.1.js" ></script>
<script src="//code.jquery.com/ui/1.10.3/jquery-ui.js" ></script>
~省略~
<script> $(function() {
$('#test-form').on('submit',function() {
alert("test1");
$.ajax({
url: "${pageContext.request.contextPath}/test",
type: "POST",
data: {
inputStr: $('#test-form').find('input[name="testInput"]').val(),
},
}).done(function (data, textStatus, jqXHR) {
alert("test2");
});
return false;
});
});
</script>
・サーブレット側
{
String inputWork = request.getParameter("inputStr");
~省略~
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<result>");
stringBuilder.append("OK");
stringBuilder.append("</result>");
String xmlString = stringBuilder.toString();
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
Writer writer = response.getWriter();
writer.write(xmlString);
writer.flush();
}
No.1ベストアンサー
- 回答日時:
詳しい理由はjqueryの内部仕様に明るくないので答えられませんが、動作させるためには以下の2つが考えられます。
1)success/error/(それらの後に呼ばれる)completeのどれを使うかはプログラムする方の都合によると思います。
$.ajax(success:function(){},);
2)$.ajaxを呼び出す関数に対して.doneを指定する
xhr_call.done()(function(略){};)
function xhr_call(){
return $.ajax()
}
参考URL
http://semooh.jp/jquery/api/ajax/jQuery.ajax/opt …
http://stackoverflow.com/questions/8840257/jquer … (より参考になりました)
少々トラブルがありまして、レスが遅くなってしまい申し訳ありません。
また、回答ありがとうございます。
なんとか解決しました。
原因としては"IEでは使用できないjava script処理が混ざっており、
以降のスクリプトがまともに動いていなかった。"
ということのようです。(コンソール出力処理)
まさかそのような処理が混ざっているとは思わず
質問の投稿時にはその部分は省いてしまっていました。
コード作成者が「IE9で動くか試すために書いた」と言っていたことから
IE9で動かないコードがは含まれていないと思いこんでしまい、
説明無しでコードだけ渡されとりあえずお試しで動かそうと四苦八苦、
コード作成者にはもはや連絡がつかず焦ってしまって
別ブラウザで試さずに質問を投稿してしまったというのが今回の顛末です。
コンソール出力は必要なかったので削除したところ正常動作しました。
No.2
- 回答日時:
サーバサイドからの戻り値を正しく評価するために、$.ajaxの呼び出し側で、dataType : 'xml' を明示する必要がありますが、done コールバック中では alert を打っているだけなので、ご提示のプログラムでは、特に不都合な点はないと思います。
ただ、ブラウザによって、dataTypeのデフォルト値が違ってくる可能性があるため、正しく指定するに越したことはありません。
一つ気になるところは、呼び出す url(しかもドメイン部分)に変数が用いられている事で、ひょっとして外部ドメイン(同一ドメイン別ポートの場合も含む)が指定されてないですか?
もしそうなら、(動作する環境もある、という言葉を信用して)サーバサイドでクロスドメインリクエスト対策を施してあったとしても、このままではクライアント側の制限で動作しない環境があります。
(具体的にはInternet Explorer 9より前)
クロスドメインリクエストでない場合は読み飛ばしてください。
少々トラブルがありまして、レスが遅くなってしまい申し訳ありません。
また、回答ありがとうございます。
なんとか解決しました。
事の顛末はもう一方の回答者様へのお礼に記載した通りで、
ご指摘いただいた外部ドメイン指定によるものではありませんでしたが、勉強になりました。
ベストアンサーは複数設定できないことから、申し訳ありませんが今回は最初に回答して下さった方に設定させていただいております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleログインボタンのデザイ...
-
googleスプレッドシートのスク...
-
jdbcでinsert,delete,createをe...
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
JDONWROADER2のエラー修復
-
スプレッドシートからリマイン...
-
googleスプレッドシートのGASに...
-
Verilogについて質問です。この...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cakePHP+Ajax アップロード状...
-
URLの中に&があると&に変...
-
Ajaxでsessionにいれた値が引き...
-
mysqlのsql文
-
jsonテキストデータの並び替え...
-
ジャンクの箇所を一切書かずに...
-
【JavaScript】confirmのボタン...
-
saved from url=(0013)abou
-
HTMLでDBからデータを表形式で...
-
データ受け渡しについて
-
DirectXとOpenGLはどちらが動作...
-
ASP.NET(VB)VBソースからJavas...
-
ASP.NET 動的に行を増やすTable
-
jQueryのAjaxで通信の途中結果...
-
ajaxでhtmlを返して画面に描画…...
-
ローカル用HTMLファイルの安全...
-
webシステムでchrome
-
http上でrequest されたxmlファ...
-
json形式データのデータ連携に...
-
HTMLでリアルタイムグラフを作...
おすすめ情報