Search code examples
phpjqueryajaxtimeoutresponse

Ajax jQuery returning successfully after 10 seconds when it shouldn't


I've got a jQuery ajax call which goes of to the server backend.php script and told to sleep for 13 seconds (or more) before responding with a simple test message. What I'm seeing is the ajax success function triggering (with a 200 response observed in firebug) after 10 seconds with no actual response from the server. If I set the response delay to less than 10 seconds I get the response message perfectly.

Is this something you've seen before? Is there some default php timeout thing going on?

    ajaxcall = $.ajax({
    type: "GET",
    url: "backend.php",
    async: true,
    cache: false,
    dataType: 'json',
    timeout: 30000,
    /* Timeout in ms. Default to 30000 (30 seconds) */
    data: "TimeStamp=" + TimeStamp,
    success: function(data) {

        if (data !== null) {
            $('#TextHistory').append(data.message);

            if (data.timestamp != 0)
            {
              TimeStamp = data.timestamp;
            }
        }
        setTimeout(
        waitForMsg, /* Request next message */
        5000 /* ..after 5 seconds, default to 5000*/ );
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {

        $('#TextHistory').append('<p>Error:' + errorThrown + '</p>');

        setTimeout('waitForMsg()',"15000"); /* milliseconds (15seconds) default to 15000 */
    }
});

}

..and on the server side i'm simply doing this:

<?php

header('Content-Type: application/json');

sleep(13);   // Changing this to test it. Will only work if less than 10

   $When = date("H:i:s",strtotime("now"));

   $response["message"] = "<p>Small Test $When</p>";

    $response["timestamp"] = 123456789;

   echo json_encode($response);

?>

Solution

  • Definitely its timing out after 10 seconds

    Place a call to phpinfo() on a blank page and see what the timouts are set to

    Look at max_execution_time for one

    It'll just need to be overriden in a php.ini file or in the PHP directly