Почему мой вызов setTimeout () не работает? - PullRequest
0 голосов
/ 16 апреля 2009

Кто-нибудь знает, что не так с кодом ниже? Система вызовет getProgressMsg() только после завершения Ajax: (

function ajax_action(action)
{
    setTimeout('getProgressMsg()',2000);

    xmlHttp=GetXmlHttpObject();

    if (xmlHttp==null)
    {
        alert ("Browser does not support HTTP Request")
        return
    }

    var url="admin.php"
    url=url+"?action=admin"
    url=url+"&sid="+Math.random()

    xmlHttp.onreadystatechange=stateChanged;

    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);

}


function getProgressMsg()
{
    xmlHttp2=GetXmlHttpObject2();

    if (xmlHttp2==null)
    {
        alert ("Browser does not support HTTP Request")
        return
    }

    var url2="admin.php"
    url2=url2+"?action=getMsg"
    url2=url2+"&sid="+Math.random()

    xmlHttp2.onreadystatechange=stateChanged2;
    xmlHttp2.open("GET",url2,true);
    xmlHttp2.send(null);
}

1 Ответ

1 голос
/ 16 апреля 2009

Некоторые мысли ...

  1. У вас есть двухсекундный таймаут. Вы уверены, что первый запрос AJAX занимает больше времени?
  2. Все JavaScript, включая обработчики событий, являются однопоточными. Если вы заняты в stateChanged(), то getProgressMsg() не будет вызываться, пока вы не вернетесь.
  3. Вы ничего не делаете в getProgressMsg(), кроме того, что делаете еще один AJAX-запрос - вы уверены, что браузер или веб-сервер не просто помещают его в очередь, где он не закончит обработку?

Предложения:

  • Попробуйте заменить код в getProgressMsg() простым вызовом alert(). Затем уменьшите задержку с 2000 до 200 и посмотрите, не появится ли она сразу.
  • Убедитесь, что вы не выполняете исключительно тяжелую обработку в stateChanged().
  • Проверьте код на стороне сервера ... Убедитесь, что вы не удерживаете ресурс при обработке первого запроса, необходимого для обработки второго.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...