Ho una pagina Web di prova HTML5 test.html
con un manifest di cache. La pagina web fa una richiesta Ajax allo stesso server, a una pagina web do_get_data.php
elencata nella sezione NETWORK:
nel manifest della cache.Chiamata di fail chiamata chiamata anche se la richiesta Ajax viene eseguita e il server restituisce 200 con dati
La richiesta viene eseguita da Firefox 10 e iPhone iOS 5 Safari (questo è registrato nello script PHP di servizio do_get_data.php
). Firefox 10 chiama la funzione di callback success
dopo 10 secondi, ovvero quando vengono restituiti i dati dal server. Tuttavia, il mio iPhone iOS 5 Safari chiama immediatamente la funzione di callback fail
dopo aver avviato la richiesta e non chiama la funzione di callback success
.
Per iPhone iOS 5 Safari, il textStatus
è error
e JSON.stringify(jqXHR)
è {"readyState":0,"responseText":"","status":0,"statusText":"error"}
.
La richiesta viene eseguita utilizzando il seguente codice nel test.html
:
<script type="text/javascript">
function test_ok(data) {
alert('Test OK, data: ' + JSON.stringify(data));
}
function testFail(jqXHR, textStatus) {
alert(textStatus + ' | ' + JSON.stringify(jqXHR));
}
function get_data(testurl) {
var senddata, request;
alert('Request for ' + testurl + ' started.');
window.testid = new Date().getTime();
senddata = {
background: true,
requestId: window.testid
};
request = $.ajax({
url: testurl,
cache: false,
type: "GET",
data: senddata,
success: test_ok
});
request.fail(testFail);
}
</script>
<input type="button" onclick="get_data('do_get_data.php')" value="test sending" />
Per riferimento, do_get_data.php
assomiglia a questo:
<?php
$id = md5(rand() . rand());
trigger_error(implode("\t", array('start', $id, $_SERVER['REQUEST_URI'], $_SERVER['REMOTE_ADDR'], $_SERVER['USER_AGENT']));
sleep(10);
header('Content-Type: application/json');
$json = json_encode(array('msg'=>'Test was OK'));
trigger_error(implode("\t", array('echo', $id, $json));
echo $json;
?>
Cosa succede se si rimuove il sonno (10)? –
E ho capito bene che hai un log che mostra richieste di successo da parte di Safari sul lato server? –
@asaddude Anche se rimuovo sleep (10), la situazione è la stessa. Sì, il registro sul lato server mostra Safari. – AndersTornkvist