とにかく、リクエストをタイムアウトさせてから、それを適切に処理できるとは思いません。正確に何が起こるかはブラウザ次第であることにすでに気付いているので、ほとんど制御できません。
ただし、解決策はかなり単純だと思います。リクエストをタイムアウトさせないでください。
Java アプリケーションの jsonp コールバック ハンドラを変更して、タイムアウト期間が過ぎたこと、およびリクエストを再度実行する必要があることをクライアントに通知することは、ほとんど手間をかけずに行うことができます。
私が言いたいことを正確に示すために、完全に機能する実際の例を作成しました。
この例は nodejs にありますが、サーバー側の実装は最小限に抑える必要があると思います。それは、クライアント側のコードが何をするかということです。
デモ:
http://jsonp-timeout.herokuapp.com/
ソース:
https://github.com/helmus/jsonp-timeout/blob/master/public/index.html
これは実際に関連するすべてのコードです。
基本的には、jsonp 呼び出しを関数内に配置して、再利用できるようにします。その後、ハンドラーが応答を受信した場合、"timeout"
サーバーが他のアクションが関連していると判断するまで、ハンドラーは簡単に要求をやり直すことができます。
$(function(){
$("#call").on("click", function(){
var makeJsonpCall = function(){
return $.ajax({
url: "rpc.js",
dataType: "jsonp"
});
};
var handler = function(data){
if (data === "timeout") {
console.log("a timeout occured, forwarding your request");
makeJsonpCall().done(handler);
return;
}else{
console.log("request completed");
}
};
makeJsonpCall().done(handler);
});
});
このアプローチは確かに十分に堅牢であり、インターフェースを最小限の変更で維持できると思います。また、エンドポイントがサポートしている場合、クロスドメイン jsonp でももちろん動作します。
タイムアウト期間を 2 または 3 分 (サーバー側) に変更できますが、それよりも長くすることはありません。