2013-01-25 15 views
6

Android 4.0,4.1,4.2の内蔵ブラウザに問題があります(テストするために何か問題はありません)。 問題は、最初のロード時にajax呼び出しが完全に機能することです。実行したAjaxボタンを好きなだけ何回も押すことができ、それは問題ありません。インターネットから切断すると正常に動作します。 しかし、終了すると(完全にバックグラウンドで実行されているのではないことを確認してください)、ブラウザーはそれを再起動します。あなたがオンラインかオフラインかは関係ありません。 ajax呼び出しから返されたエラーは、status = 0、readyState = 0の "Error"です。
ステータスが「200」でreadyState = 4.AndroidブラウザのjQuery Ajaxに関する問題と、appcacheを使用した場合

コードはAndroid Chrome、Firefox、Operaでテストした他のすべてのブラウザで検索されます。 IOS 5と6では動作し、すべてのデスクトップブラウザが見つかります。 私は行方不明のものがあるか、ブラウザに組み込まれているバグを見つけましたか?これについての助けがあれば、特に私がやったばかげたことがあれば、特に感謝します。

この問題をよく示すテストスクリプトを作成しました。私はこのメッセージの最後にそれを付けました。

おかげ

ティム

test.phpを

<?php  
function displayPage() { 
?> 
<!DOCTYPE html> 
<html manifest="test.manifest" debug="true"> 
    <head> 
     <meta name="viewport" content="width=device-width, initial-scale=1" > 
     <title>test</title> 
     <script type="text/javascript" src="jquery-1.9.0.min.js"></script> 
     <script type="text/javascript"> 
      function runAjaxGet() { 
       var XMLHttpRequest = $.ajax({ 
        url: "test.php", 
        dataType: "json", 
        data: "test=test", 
        traditional: "true", 
        success: function(responseData) { 
         alert('good\n responseData: '+responseData+ '\n res:' + XMLHttpRequest.responseText +'\n readyState: '+ XMLHttpRequest.readyState + '\n Status: '+XMLHttpRequest.status); 
         console.log(XMLHttpRequest); 
        }, 
        error: function (xhr, ajaxOptions, thrownError, responseData) { 
         alert('bad\n responseData: '+responseData+ '\n res:' + XMLHttpRequest.responseText +'\n readyState: '+ XMLHttpRequest.readyState + '\n Status: '+XMLHttpRequest.status); 
         console.log(XMLHttpRequest); 
        } 
       }); 
      } 
      $(document).ready(function() { 
       runAjaxGet(); 
      }); 

     </script> 
    </head> 
    <body> 
     <button Name="Run Ajax" onclick="runAjaxGet();">Run Ajax</button> 
    </body> 
</html> 
<?php 
} 

function processRequests() { 
    header("Content-Type: application/json; charset=UTF-8"); 
    echo (json_encode("respose from Ajax Call")); 
} 

date_default_timezone_set ("UTC"); 

if (isset($_REQUEST['test'])) { 
    $which = $_REQUEST['test']; 
} else { 
    $which = ''; 
} 

switch ($which) { 
    case "test": 
     processRequests(); 
     break; 

    default : 
     displayPage(); 
     break; 
} 
?> 

test.manifest

CACHE MANIFEST 
test.php 
jquery-1.9.0.min.js 
test.php?test=test 

答えて

0

だけアスタリスクでNETWORKセクションを追加し、それが動作します

CACHE MANIFEST 
test.php 
jquery-1.9.0.min.js 
test.php?test=test 
NETWORK: 
* 
0

私はこの同じ問題にぶつかり、キャッシュから取得したときに0が成功を示したと判断しました。これは、要求が完全にローカルで解決されているため、実際のHTTP要求が含まれていないためです。

Appcacheマニフェストファイル:

CACHE MANIFEST 

CACHE: 
/config 

Javascriptを:

var request = new XMLHttpRequest(); 
request.open('GET', '/config', false); // async=false is ok because this file will always come from AppCache 
request.send(null); 

// Older versions of android return 0 when ajax request retrieved from appcache 
if (request.status == 200 || request.status == 0) { 
    return JSON.parse(request.responseText); 
} else { 
    console.log("ERROR: config not retrievable"); 
    throw "Attempt to retrieve config return http status " + request.status; 
} 
関連する問題