2013-01-25 10 views
6

mamy problem z wbudowaną przeglądarką na Androida 4.0, 4.1 i 4.2 (nie mamy nic niższego do przetestowania). Problem polega na tym, że wywołanie ajaxa działa idealnie przy pierwszym ładowaniu, możesz nacisnąć przycisk Ajax tak długo, jak chcesz i wszystko będzie dobrze. Możesz odłączyć się od internetu i będzie działać poprawnie. Ale jeśli wyjdziesz (W PEŁNI, upewnij się, że nie działa tylko w tle), a następnie uruchom go ponownie, uruchomi się on po wczytaniu i naciśnięciu przycisku. Nie ma znaczenia, czy jesteś online, czy offline. Błąd, który został zwrócony z wywołania ajax, to "Błąd" o statusie = 0 i readyState = 0.
Po pomyślnym otrzymaniu wiadomości zwrotnej "odpowiedz z Ajax Call" o statusie = 200 i readyState = 4.Problem z przeglądarką internetową z jQuery Ajax i kiedy używany jest appcache

Kod działa we wszystkich innych przeglądarkach testowanych w systemach Android Chrome, Firefox i Opera. na IOS 5 i 6 działa i każda przeglądarka na komputerze, którą możemy znaleźć. Czy jest coś, czego mi brakuje lub znaleźliśmy błąd w wbudowanej przeglądarce. Jakakolwiek pomoc w tej sprawie byłaby doceniona, zwłaszcza jeśli to po prostu coś głupiego zrobiłem.

Stworzyliśmy skrypt testowy, który dobrze ilustruje ten problem. Załączam go na końcu tej wiadomości.

Dzięki

Tim

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 

Odpowiedz

0

Wystarczy dodać odcinka sieci z gwiazdką i będzie działać

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

Uderzyłem ten sam problem i stwierdziłem, że po pobraniu z pamięci podręcznej 0 oznacza sukces. Jest to prawdopodobnie spowodowane faktem, że nie ma faktycznego żądania http, ponieważ żądanie jest rozwiązywane w całości lokalnie.

pamięć podręczną aplikacji plik manifestu:

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; 
} 
Powiązane problemy