Вызывается обратный вызов при ошибке, хотя выполняется запрос Ajax и сервер возвращает 200 с данными

У меня есть тестовая веб-страница HTML5 test.html с манифест кеша. Веб-страница выполняет Ajax-запрос к тому же серверу, к веб-странице do_get_data.php , которая указана в разделе СЕТЬ: в манифесте кеша.

Запрос выполняется как Firefox 10, так и iPhone iOS 5 Safari (это зарегистрировано в обслуживающем скрипте PHP do_get_data.php ). Firefox 10 вызывает функцию обратного вызова success через 10 секунд, то есть когда данные с сервера возвращаются.Однако мой iPhone iOS 5 Safari вызывает функцию обратного вызова fail сразу после запуска запроса и не вызывает функцию обратного вызова success .

Для iPhone iOS 5 Safari значение textStatus равно error и JSON.stringify (jqXHR) равно {"readyState": 0, " responseText ":" "," status ": 0," statusText ":" error "} .

Запрос выполняется с использованием следующего кода в 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" />

Для справки, do_get_data.php выглядит следующим образом:

<?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;
?>
7
задан AndersTornkvist 24 February 2012 в 12:07
поделиться