ページに次のJavaScriptコードがあります。 ajax呼び出しが行われると、ブラウザーの検査/デバッガーセクションでnet :: ERR_EMPTY_RESPONSEエラーがスローされることがわかりました。ローカルホスト環境では正常に動作しますが、本番環境では上記のエラーがスローされます。
クライアント側のコードでは、
<script>
$(document).ready(function(){
$("#identityLinks a").on("click", function(){
value = $(this).attr("id");
if(value != "")
{
$.ajax({
url: "publish/updateUsersData.php",
type: "POST",
data: {receiverId: value},
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
dataType: "json",
success: function(data) {
//alert(data["result"]);
console.log(data["result"]);
},
error: function(xhr, textStatus, errorThrown) {
//alert(xhr +" "+ textStatus +" "+errorThrown);
console.log(xhr +" "+ textStatus);
}
});
}
});
</script>
サーバー側コード(PHP)では、次のコードがpdateUsersData.phpにあります。
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1996 00:00:00 GMT');
header('Content-type: application/json; charset=UTF-8');
if(isset($_POST["receiverId"]))
{
$receiver_id = trim($_POST["receiverId"]);
$arr = array("result"=>$receiver_id);
echo json_encode($arr); die();
break;
}
else
{
$arr = array("result"=>"No user data received. Error!");
echo json_encode($arr); die();
break;
}
?>
Expire呼び出しのヘッダーまたはJquery 1.9.1バージョンのバグが原因だと思いますか?以前のバージョンでは、このようなエラーは見つかりませんでした。また、このコードは5か月間更新されておらず、ブラウザーエラーはほんの少し前に発生します。すべてのあなたの助けとサポートをありがとう。
編集:
ステータス:これ[〜#〜] issue [〜#〜]はこれまでのところ解決されていません。 Jquery AJAX専門家の助けが必要です。誰でも、この質問を促進してください。また、[〜#〜] cors [〜#〜]はこの問題の責任を負いません。
上記のエラーが発生したコンソールをクリックすると、次の行に直接移動しました
JQuery 1.9.1 where console error lines point to:
=> xhr.send( ( s.hasContent && s.data ) || null );
Also these ones are shown in console error mark:
=> transport.send( requestHeaders, done );
=> ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle
|| handleObj.handler )
.apply( matched.elem, args );
=> return typeof jQuery !== core_strundefined &&
(!e || jQuery.event.triggered !== e.type) ?
jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined;
このPROVISIONAL HEADERS ARE SHOWNエラーの原因となっているjquery最新バージョンです。
あなたのリクエストは、CORS仕様では「単純なリクエスト」として分類されていないと思います。
http://www.w3.org/TR/cors/#simple-cross-Origin-request-
content-Type:application/jsonの応答ヘッダーを設定しているためです。
サーバーはプリフライトリクエストを処理する必要があります。これには、CORSリクエストが成功するために、リクエストとレスポンスの両方にいくつかの追加ヘッダーを設定する必要があります
ここに、あなたが何をする必要があるかについての良い記事があります-「それほど単純ではない」の下のビットをチェックしてください
私のページにも同じ問題がありますsometimesこれは、変数の数または変数の大きさのために起こると思います。約250個の変数のjsonを問題なく送信するページがありますが、このページで約1500個の変数が送信されるときにこのエラーが発生します。この問題は新しいものです。以前は、変数が3000でもすべて問題ありませんでした。この問題は、chromeと最近のバージョンのfirefoxの両方で発生します。30Mbデータの100万の変数を復活させるようにApacheを設定しているため、サーバー側のエラーではありません。
この同じエラーが発生していたため、配列で処理する必要があるすべてのデータをサーバーに送信し、更新された配列をクライアントに吐き出して、1つだけAJAX呼び出しが行われます。
この問題の正確な原因を特定することはできませんでしたが、何が起こっているのかは、これらのすべてのAJAX呼び出しで、ある種のバッファーが容量いっぱいになることです。これらのリクエストの一部をシャットダウンするサーバー。
お役に立てれば。
そのため、使用されている言語やテクノロジーに関係なく、これはさまざまな理由で発生する可能性があります。 angular resource。PHP、Jquery、Angularすべてがエラーを処理します。方法は異なりますが、結果は次の3つのいずれかが発生します。
レイテンシーまたはネットワークの問題、非常に遅い接続でこれが発生しましたが、これは不良なルーターまたは不適切なファイアウォール設定、またはウイルスからあなたを保護するためにプロキシを配置するavastのようなプログラムに対するものです。
サーバーの負荷が高いため、ストレステストからサーバーを100%CPUに強制しました。これは、サーバーが要求を十分に速く処理していないため、ランダムコールで発生します。これは修正が難しく、実際にはシステムのスケーリングの問題です。
巨大なデータセット、応答が失敗したために送信される大きなアイテム。通常、これは、使用しているWebサーバーのタイムアウト設定を調整することで修正できます。
ほとんどの場合、すべてのガベージメモリをダンプ/リセットし、すべて/すべてのループの後に出力メモリをフラッシュ/リセットするように記述した単純な関数でこれを解決できました。
function memes(){
ob_flush();
ob_end_flush();
gc_collect_cycles();
ob_start();
gc_enable();
}
XMLHttpRequest()を使用しているときにも同じエラーが発生していました。
ただし、サーバー側でスクリプトのメモリ制限を無効にすることでエラーを解決できました。
これを行うには、php.iniファイルでmemory_limitを-1に設定します。デフォルトでは128Mに設定されているため、サーバーのリソースを大量に消費する可能性があるため、メモリサイズを完全に無効にするのではなく、メモリサイズを増やしてみてください。
ネットワークの問題が原因で同じ問題が見つかりました。これもネットワークが原因である可能性があります。