0

Webページに次のコードを設定しています(現時点では非公開):

function DoRequest(httpReq,url,param){

  httpReq.open("POST",url,false);
  httpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  httpReq.send(param);
  httpReq.onreadystatechange = function() {
   if (httpReq.readyState==4) {alert(httpReq.responseText);}
  }

  if(httpReq.status==200){
    return httpReq.responseText;
  } else {
    return httpReq.status;
 }
}

これを介してリクエストを実行すると、PCでfirefox、safari、つまり7-9、chromeなどを介して、200ステータスとテキストが正しく返されます。

これとまったく同じページを iPhone または iPad で実行すると、ステータスが 0 になり、応答テキストが何も表示されず、正しい応答テキストのあとがきのコールバック関数からアラートが返されます。モバイル サファリ ブラウザのコードを処理する前に、リクエストが完了するのを待っていないように見えますが、強制的に待機させる方法はありますか、それともフラグが見えませんか?

また、Safariでonreadystateコールバックのみを取得します。他のブラウザーでは実行しません。何らかの理由で非同期を実行する代わりに非同期を実行するようにトリガーしていた場合に備えて、関数を削除しようとしましたが、サイコロはありません3 番目のパラメーターは false です。

またhttpRq.open("POST",url);、3番目のパラメーターと onreadystatechange 関数を使用せずに試してみましたが、まだ非同期で実行されています。

URL は絶対パスです。

4

1 に答える 1

1

Mobile Safari は XMLHttpRequest の同期使用をサポートしていません (open の 3 番目のパラメーターはコードで false であり、サポートされていません)。

リクエストの結果に依存するものはすべて、コールバック関数に移動し、alert() 呼び出しがある場所で onreadystatechange 関数で呼び出す必要があります。

于 2013-01-14T20:17:04.563 に答える