Tengo una página web de prueba HTML5 test.html
con un manifiesto de caché. La página web realiza una solicitud de Ajax al mismo servidor, a una página web do_get_data.php
que se enumera en la sección NETWORK:
en el manifiesto de caché.Falló la devolución de llamada llamada aunque se realiza la solicitud Ajax y el servidor devuelve 200 con datos
La solicitud se realiza tanto en Firefox 10 como en iPhone iOS 5 Safari (esto se registra en el script PHP de servicio do_get_data.php
). Firefox 10 llama a la función de devolución de llamada success
después de 10 segundos, es decir, cuando se devuelven los datos del servidor. Sin embargo, mi iPhone iOS 5 Safari llama a la función de devolución de llamada fail
inmediatamente después de que inició la solicitud y no llama a la función de devolución de llamada success
.
Para iPhone iOS 5 Safari, textStatus
es error
y JSON.stringify(jqXHR)
es {"readyState":0,"responseText":"","status":0,"statusText":"error"}
.
La solicitud se realiza utilizando el siguiente código en 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" />
Como referencia, do_get_data.php
se parece a esto:
<?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;
?>
¿Qué sucede si elimina el sueño (10)? –
¿Y entiendo correctamente que tiene un registro que muestra las solicitudes exitosas de Safari en el lado del servidor? –
@asaddude Incluso si elimino el sueño (10), la situación es la misma. Sí, el registro en el lado del servidor muestra Safari. – AndersTornkvist