web-dev-qa-db-ja.com

PHP Jquery Ajax呼び出しはnet :: ERR_EMPTY_RESPONSEをスローします

ページに次の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最新バージョンです。

27
webblover

あなたのリクエストは、CORS仕様では「単純なリクエスト」として分類されていないと思います。

http://www.w3.org/TR/cors/#simple-cross-Origin-request-

content-Type:application/jsonの応答ヘッダーを設定しているためです。

サーバーはプリフライトリクエストを処理する必要があります。これには、CORSリクエストが成功するために、リクエストとレスポンスの両方にいくつかの追加ヘッダーを設定する必要があります

ここに、あなたが何をする必要があるかについての良い記事があります-「それほど単純ではない」の下のビットをチェックしてください

http://www.html5rocks.com/en/tutorials/cors/

4
Mister P

私のページにも同じ問題がありますsometimesこれは、変数の数または変数の大きさのために起こると思います。約250個の変数のjsonを問題なく送信するページがありますが、このページで約1500個の変数が送信されるときにこのエラーが発生します。この問題は新しいものです。以前は、変数が3000でもすべて問題ありませんでした。この問題は、chromeと最近のバージョンのfirefoxの両方で発生します。30Mbデータの100万の変数を復活させるようにApacheを設定しているため、サーバー側のエラーではありません。

この同じエラーが発生していたため、配列で処理する必要があるすべてのデータをサーバーに送信し、更新された配列をクライアントに吐き出して、1つだけAJAX呼び出しが行われます。

この問題の正確な原因を特定することはできませんでしたが、何が起こっているのかは、これらのすべてのAJAX呼び出しで、ある種のバッファーが容量いっぱいになることです。これらのリクエストの一部をシャットダウンするサーバー。

お役に立てれば。

2
amorimluc

そのため、使用されている言語やテクノロジーに関係なく、これはさまざまな理由で発生する可能性があります。 angular resource。PHP、Jquery、Angularすべてがエラーを処理します。方法は異なりますが、結果は次の3つのいずれかが発生します。

  1. レイテンシーまたはネットワークの問題、非常に遅い接続でこれが発生しましたが、これは不良なルーターまたは不適切なファイアウォール設定、またはウイルスからあなたを保護するためにプロキシを配置するavastのようなプログラムに対するものです。

  2. サーバーの負荷が高いため、ストレステストからサーバーを100%CPUに強制しました。これは、サーバーが要求を十分に速く処理していないため、ランダムコールで発生します。これは修正が難しく、実際にはシステムのスケーリングの問題です。

  3. 巨大なデータセット、応答が失敗したために送信される大きなアイテム。通常、これは、使用しているWebサーバーのタイムアウト設定を調整することで修正できます。

2
James

ほとんどの場合、すべてのガベージメモリをダンプ/リセットし、すべて/すべてのループの後に出力メモリをフラッシュ/リセットするように記述した単純な関数でこれを解決できました。

function memes(){
  ob_flush();
  ob_end_flush();
  gc_collect_cycles();
  ob_start();
  gc_enable();
}
0
Kevin

XMLHttpRequest()を使用しているときにも同じエラーが発生していました。

ただし、サーバー側でスクリプトのメモリ制限を無効にすることでエラーを解決できました。

これを行うには、php.iniファイルでmemory_limitを-1に設定します。デフォルトでは128Mに設定されているため、サーバーのリソースを大量に消費する可能性があるため、メモリサイズを完全に無効にするのではなく、メモリサイズを増やしてみてください。

0
Hasan Wajahat

ネットワークの問題が原因で同じ問題が見つかりました。これもネットワークが原因である可能性があります。

0
user1752752