2016-06-15 98 views
0

ブラウザのコンソールでエラーが発生しています。Java with ajax - ERR_EMPTY_RESPONSE - サーバーがリクエストを処理中にAjaxレスポンスがスローされる

Failed to load resource: net::ERR_EMPTY_RESPONSE

私のAJAX呼び出しは、すべてのボタンのクリックのために動作しますが、このエラーがこれらのボタンをクリックする.On一つだけのボタン(testExtボタンを言うことができます)のために来ている、バックグラウンドスクリプトが実行され、いくつかを実行しますテスト。唯一の違いは、のtestExtは、実行が完了するまでに(約4分27秒)かかるが、サーバーの最後でスクリプトが正常に実行された場合でも、errorブロックのAjaxブロックでは4分16秒でクライアントに応答する。

コンソールは、エラーの下に示す:

Object {readyState: 0, responseText: "", status: 0, statusText: "error"}

Ajaxコード:

$.ajax({ 
    type : "Get", 
    url : "resultValue.htm", 
    cache: false, 
    data : "testName=" + name, 
    success : function(response) { 
     // success logic here 
    }, 
    error: function(jqXHR, textStatus){ 
     console.log(jqXHR); 
     alert('There has been server side error. Please contact TechEng team to get this fixed.') 
    } 
}); 

ような要求から返される応答は、単に1つの行の文字列である:

/xxxx/reports/2016-06-15/07-03-53-237-r1Qn/xxx-smoketest-report.html

私はSOに関するいくつかの質問をしましたが、私はsurではありません私はメモリサイズを増やそうとしたので、サーバーサイドでJavaメモリの問題が発生した場合は、e。何がうまくいかないのか理解してください。私は私が直接サーバーAPIを打つとき、私はブラウザにレスポンスを以下の取得このajax要求

を処理するために、特定のシナリオをしないのです:

FireFoxの:

response on Firefox

クローム

response on Chrome

+0

タイムアウトが発生する可能性があります。サーバとブラウザの両方で、時間がかかりすぎると思われるリクエストを終了することができます。あなたのjquery ajax呼び出しに 'timeout'を追加しようとしましたか?例えば'$ .ajax({url:" resultValue.htm "、タイムアウト:300000、... etc ...})'。また、apiはどんな種類のサーバーをホストしていますか?それは長い間要求を許可しない可能性があります。 – TheMadDeveloper

+1

処理時間が4分を超える場合、Ajaxは実際のところ正しいアプローチのように継ぎ目がありません。私は、なぜ処理に時間がかかり、真剣に真実にしようとしているのかを見ていきたいと思います。それだけのことができないなら、あなたは[サービスワーカー](https://developer.mozilla.org/en-US/docs)/Web/API/Service_Worker_API/Using_Service_Workers)このタイプの作業には、より適している可能性があります。 – DelightedD0D

+0

@ TheMadDeveloper: 'timeout'を試しました。そのLinuxサーバー。 @DelightedDOD:これは、異なるサーバー上で並行して実行されるいくつかのシェルテストスクリプトをトリガし、最後にすべてのレポートが圧縮されたときにファイルパスを返します。 –

答えて

4

あなたは何らかのタイムアウトに対して走っているように聞こえます。ブラウザー、Webサーバー、アプリケーションサーバー...多分ネットワークデバイスやオペレーティングシステムでさえ、4分以上のリクエストがタイムアウトできる場所はいくつもあります。通常、最低のタイムアウト値はWebサーバーによって設定されます。

私はそれほどよく知られていない風邪のように聞こえますが、良い情報はhttps://tomcat.apache.org/connectors-doc/common_howto/timeouts.htmlで見つかるかもしれません。おそらく、asyncTimeoutのようなものを設定する方法があります。

しかし、私は私の前のコメント(私はあなたが注意を撮影した知っている)繰り返しになります

I would also second @DelightedD0D 's suggestion of using service workers or some other mechanism (such as polling). AJAX isn't really built for requests this long, so you'll likely run in to other issues.

私は極端な値にこれらを設定しないことを推奨します指し示さでもドキュメントを。

私が言及するとして、あなたはあなたのコメントから、別のルートを行っているように聞こえる:

@TheMadDeveloper DelightedD0D: From what you guys have suggested I am thinking to use websocket for this scenario. Do you think it's a good idea? although I am stuck stackoverflow.com/questions/37940540/

私はWebSocketを多分やり過ぎの少しあることが、これは、賢明な決断だと思います。私が収集したものから、あなたの仕事が実行されている間は、サーバーとクライアントが常に話す必要はありません。本当に、あなたはそれがいつ終わったかを知りたいだけです。

websocketのパスをあまりにも超えていない場合は、Server-Sent Events(SSE)をご覧ください。

This postには、Tomcat固有の情報があります。 Also see this postで、SSEとWebソケットの詳細な比較を行っています。

希望に役立ちます!

関連する問題