2

javascript が .ajax() 関数を介して POST 要求を使用して PHP サーバーを呼び出す Web ページがあります。PHP サーバーは、外部のサードパーティ API を呼び出して、テキスト分析ジョブを送信します。テキスト分析ジョブが処理されると、PHP サーバーは API からの結果を照会します。ただし、サード パーティの REST API には、ジョブのステータスを照会する方法がありません。そのため、ジョブを送信した後、プログラムを約 1 分間スリープ状態にしてから、結果をクエリします。ただし、時々私の結果は不完全です。スリープ時間を長く設定してみましたが、1 分以上に設定すると、Javascript から PHP への最初の POST リクエストがタイムアウトするようです。ajax タイムアウト パラメータを高く設定しても役に立ちません。これをどのように解決できるかについて誰か提案がありますか? どんな助けでも本当に感謝しています。

ajax リクエストは次のようになります。

function callServer(params, success) {
    var url = "ie.php";
    $.ajax({
       type: 'POST',
       url: url,
       data: params,
       timeout: 60000000, //time out parameter doesn't work
       dataType: "json",
       success: function(result, textStatus) {
                    console.log(JSON.stringify(result, null, '  '));
            if (success) success(result);
       },
       error: function(xhr, textStatus, errorThrown) {
                    var text = 'Ajax Request Error: ' + 'XMLHTTPRequestObject status: ('+xhr.status + ', ' + xhr.statusText+'), ' +
                                            'text status: ('+textStatus+'), error thrown: ('+errorThrown+')';
                    console.log('The AJAX request failed with the error: ' + text);
                    console.log(xhr.responseText);
                    console.log(xhr.getAllResponseHeaders());
       }
    });
}

エラーは次のようになります。

AJAX リクエストが次のエラーで失敗しました: Ajax リクエスト エラー: XMLHTTPRequestObject ステータス: (0, エラー)、テキスト ステータス: (エラー)、スローされたエラー: ()

4

3 に答える 3

0

このようなタイムアウト エラーを修正するには、3 つまたは 4 つの異なる場所でタイムアウトの長さを設定する必要があります。

  1. Jquery 自体 (これは、タイムアウト パラメータを使用して行うことも、 $.ajaxSetup 関数を使用してグローバルに行うこともできます)

  2. php.ini で max_execution_time を設定することによる PHP

  3. Web サーバー (Apache と IIS では異なります。たとえば、IIS で FastCGI 経由で PHP を実行している場合、FastCGI 設定でアイドル タイムアウト、要求タイムアウト、およびアクティビティ タイムアウトを設定する必要があります)

  4. おそらくあなたのブラウザ自体ですが、過去にはこれは私には必要ありませんでした

これらすべての場所でタイムアウトを設定すると、機能するはずです。私にとっては、あなたのように他のすべての手順を実行しましたが、FastCGI 設定でアクティビティ タイムアウトを設定するまで問題は修正されませんでした。

于 2014-01-07T00:37:47.293 に答える
0

あなたはこれができますか?

function callServer(params, success) {
    var url = "ie.php";
    setTimeout(function(){
        $.ajax({
           type: 'POST',
           url: url,
           data: params,
           dataType: "json",
           success: function(result, textStatus) {
                        console.log(JSON.stringify(result, null, '  '));
                if (success) success(result);
           },
           error: function(xhr, textStatus, errorThrown) {
                        var text = 'Ajax Request Error: ' + 'XMLHTTPRequestObject status: ('+xhr.status + ', ' + xhr.statusText+'), ' +
                                                'text status: ('+textStatus+'), error thrown: ('+errorThrown+')';
                        console.log('The AJAX request failed with the error: ' + text);
                        console.log(xhr.responseText);
                        console.log(xhr.getAllResponseHeaders());
           }
        })
    }, 200);
}
于 2013-09-10T19:44:54.563 に答える