2012-03-02 10 views
4

私は、JS XmlHttpRequestオブジェクトを使用して簡単なAJAX投稿をWebサーバーのWebページに実装しました。AndroidでのXmlHttpRequestのダブル投稿の問題

しかし、私は、Android OS 2.Xのデフォルトブラウザで奇妙な症状/問題を観察しました つまり、何らかの理由でウェブサーバーが応答を返すために十分長い遅延がある場合(ハードでシミュレートできるWebページのThread.Sleepをコーディングしている)、ブラウザは待機中に自動的に同じリクエストをWebサーバーに再度ポストします。

<script type="text/javascript"> 
    $(document).ready(function() { 
     PerformRequest(); 
    }); 

    function PerformRequest() { 
     appendMessage('PerformRequest... '); 

     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("POST", "http://localhost/DelaySite/Default.aspx", true); 
     xmlhttp.onreadystatechange = function() 
      { 
      appendMessage("xmlhttp.readyState: " + xmlhttp.readyState, true); 
      appendMessage("xmlhttp.status: " + xmlhttp.status, true); 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
       { 
       // successful response 
       } 
      } 
     xmlhttp.send(); 
    } 
</script> 

Android搭載ブラウザでこの問題を見たことがありますか?もしそうなら、誰でも原因を知っていますか?

これはセキュリティ上の問題ではありませんか?モバイルとホスト間のネットワーク遅延が十分に長い場合、各要求を2回行う可能性がある場合を考慮してください。

しかし、私は

よろしく、
オリバー

+0

は、ここで発生した同じ問題のようです。http://stackoverflow.com/questions/15499647/jquery-ajax-get-request-executing-twice – gmh04

答えて

0

はあなたにdocument.ready関数内にconsole.logを置くことができる唯一のAndroid OS 2.xでは、ICSにこの問題を複製することはできませんそのことが2回発射されていないことを確認してください。プラグインなどにより、document.readyが2回発生することがあります。

多分、ここで説明するように、 ondevicereadyイベントに関数を呼び出してみてください:http://docs.phonegap.com/en/1.4.1/phonegap_events_events.md.html

+0

私はそれがdocument.readyではないことを2回確認しました。また、私はハイブリッドアンドロイドアプリをテストしているわけではありません。純粋にAJAX呼び出しを実行するhtmlページです。この二重の掲示の問題は、ホストの応答が一定の遅延で戻った場合にのみ発生します。 –

2

私は同じ問題に遭遇した、しかし、私は(Skyfireののaswellを試してみました)、それはネイティブブラウザに固有のものではないことを発見しました。これら三つのAndroid携帯電話上で繰り返し要求するまでの遅延時間は、(一貫)であった:

  • サムスンギャラクシーS2:30秒
  • HTCの欲望:60秒
  • HTCセンセーション:60秒

私は仕事で助言を求めていました。応答は非同期で要求を行うことでした。

サーバーが要求を非同期に処理し、POST要求に応答するようにしますPOST要求の進行を示すステータス・ページ/ URLを指し示す位置を含む201を直ちに使用する。クライアントは、このURLにGETを使用してリクエストの進行状況を取得できます。