0

Javascript: XMLHttpRequest を使用して、Web サーバー上の特定の php ルーチンによってエコーされる少量のデータを取得します。コールバック関数で非同期。または同期、オッズはありません。

この問題は、php ファイルが存在しないかアクセスできない場合に発生します。responseText プロパティは、エラー フラグを返す代わりに、サーバー 404 エラー ページの HTML コンテンツを返します。

404 ページのコンテンツはサーバーごとに異なるため、文字列テストでこの状況をトラップすることは事実上不可能です。エラーが発生したという事実にフラグを立て、代わりに null を返す方法はありますか?

 // envvars is set previously
 AjaxRequest.open('post','handler.php?nocache='+nocache,true);
 AjaxRequest.setRequestHeader("User-Agent",'Firefox');
 AjaxRequest.onreadystatechange = aCallback;
 AjaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 AjaxRequest.setRequestHeader("Content-length", envvars.length);
 AjaxRequest.setRequestHeader("Connection", "close");
 AjaxRequest.send(envvars);
}

function aCallback() {
 if(AjaxRequest.readyState == 4){
   var response = AjaxRequest.responseText;
   if(response == 0){
     // It is useless to test for failure here because a complete 404 page is returned, 
     // instead of a null or -1 response. 
     document.ajax.response.value="Fail";   
    } else {
     document.ajax.response.value=response;   
   }
 }
}

// handler.php:
if ($_POST["request"]=="countbananas"):
  echo "bananas=43" ;
endif;

ps jQueryが言及されることは知っていますが、そのルートは避けたいと思います。

4

2 に答える 2

0

statusオブジェクトのプロパティをXMLHttpRequest読み取って、HTTP応答コードを取得できます。

function aCallback() {
 if(AjaxRequest.readyState == 4){
   if(AjaxRequest.status !== 200){
     // something went wrong
     document.ajax.response.value="Fail";   
    } else {
     var response = AjaxRequest.responseText;
     document.ajax.response.value=response;   
   }
 }
}

もちろん、これは、ソースが「404ファイルが見つかりません」などの適切なHTTPコードを返していることを前提としています。

于 2013-03-05T21:53:29.583 に答える
0

XMLHttpRequestによって返されるHTTPステータスコードを使用できませんか?

if ( AjaxRequest.status + "" == "404" ) {
  // Error page
}

または:

// 4xx status code
if ( (AjaxRequest.status + "").substr(0,1) == "4" ) {
  // Error page
}
于 2013-03-05T21:53:45.277 に答える