私はajaxリクエスト処理にSpring deferredresult(servlet 3 async)を使用しています.しかし、deferedresultが返された後、ajaxリクエストの成功メソッドでレスポンスオブジェクトを取得していません.これの理由は何ですか?構成に何か不足していますか?
以下は ajax 呼び出しコードです。
function sendajaxreq() {
$
.ajax({
url : "plantView/testLink",
type : "GET",
data : "",
cache : false,
success : function(messages) {
alert(messages);
},
error : function(xhr) {
if (xhr.statusText != "abort" && xhr.status != 503) {
console
.error("Unable to retrieve chat messages. Chat ended.");
}
}
})
}
コントローラーコード:
@RequestMapping(value = "/testLink", method = RequestMethod.GET)
@ResponseBody
public DeferredResult<Map<String, WebView>> testLink() {
DeferredResult<Map<String, WebView>> chartsResult = new DeferredResult<Map<String, WebView>>();
Map<String, WebView> res = processSampleReq();
chartsResult.setResult(res);
chartsResult.onCompletion(new Runnable() {
@Override
public void run() {
System.out.println("deffered res completed");
}
});
return chartsResult;
}
chartsResult を返した後でも、ajaxcall 成功メソッドでメッセージを null として取得しています。
web.xml で、deffered result が機能するように私が行った唯一の変更は、ディスパッチャー サーブレットとファイラー マッピングの非同期サポートを追加したことです。
Spring 3.2.0.RELEASE バージョンと Tomcat 7.0.34 を使用しています。
ありがとう、ディプティ。