重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。
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();
}

A 回答 (2件)

詳しい理由は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 … (より参考になりました)
    • good
    • 0
この回答へのお礼

少々トラブルがありまして、レスが遅くなってしまい申し訳ありません。
また、回答ありがとうございます。
なんとか解決しました。

原因としては"IEでは使用できないjava script処理が混ざっており、
以降のスクリプトがまともに動いていなかった。"
ということのようです。(コンソール出力処理)
まさかそのような処理が混ざっているとは思わず
質問の投稿時にはその部分は省いてしまっていました。

コード作成者が「IE9で動くか試すために書いた」と言っていたことから
IE9で動かないコードがは含まれていないと思いこんでしまい、
説明無しでコードだけ渡されとりあえずお試しで動かそうと四苦八苦、
コード作成者にはもはや連絡がつかず焦ってしまって
別ブラウザで試さずに質問を投稿してしまったというのが今回の顛末です。
コンソール出力は必要なかったので削除したところ正常動作しました。

お礼日時:2013/10/27 00:30

サーバサイドからの戻り値を正しく評価するために、$.ajaxの呼び出し側で、dataType : 'xml' を明示する必要がありますが、done コールバック中では alert を打っているだけなので、ご提示のプログラムでは、特に不都合な点はないと思います。


ただ、ブラウザによって、dataTypeのデフォルト値が違ってくる可能性があるため、正しく指定するに越したことはありません。


一つ気になるところは、呼び出す url(しかもドメイン部分)に変数が用いられている事で、ひょっとして外部ドメイン(同一ドメイン別ポートの場合も含む)が指定されてないですか?

もしそうなら、(動作する環境もある、という言葉を信用して)サーバサイドでクロスドメインリクエスト対策を施してあったとしても、このままではクライアント側の制限で動作しない環境があります。
(具体的にはInternet Explorer 9より前)

クロスドメインリクエストでない場合は読み飛ばしてください。
    • good
    • 0
この回答へのお礼

少々トラブルがありまして、レスが遅くなってしまい申し訳ありません。
また、回答ありがとうございます。
なんとか解決しました。

事の顛末はもう一方の回答者様へのお礼に記載した通りで、
ご指摘いただいた外部ドメイン指定によるものではありませんでしたが、勉強になりました。

ベストアンサーは複数設定できないことから、申し訳ありませんが今回は最初に回答して下さった方に設定させていただいております。

お礼日時:2013/10/27 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!