Как проверить, занята ли функция ajax от предыдущего вызова - PullRequest
4 голосов
/ 05 июня 2009

Как проверить, занята ли функция ajax с предыдущего вызова? Как я могу предотвратить вызов функции ajax, если она readyState != 4 еще от предыдущего вызова?

Ответы [ 2 ]

5 голосов
/ 05 июня 2009

Вы можете использовать логическое и соответствующее onreadystatechange functoin;

var inprogress = true;
ajaxRequest = ...
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
        inprogress = false;
    }
}
0 голосов
/ 05 июня 2009

Вопрос в том, хотите ли вы пропустить Ajax-вызов, если предыдущий вызов все еще занят или нет? Если вы хотите пропустить это решение, решение простое, а решение от Матфея идеально вам подходит. Однако, если вы хотите начать выполнение вызова после завершения предыдущего, это совсем другая история. Я могу предоставить вам некоторый код, если это необходимо.

Работали над решением:

<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script language="javascript" type="text/javascript">
var requestInProcess = false;
var timer = null;

function requestSomeStuffA() {
    var responseHolder = $("responseHolder");

    new Ajax.Request(
        "http://webservicelocation/",
        {
            method: 'GET',
            contentType: 'application/json; charset=utf-8',
            onCreate: function() { 
                requestInProcess = true;
            },
            onSuccess: function(transport) {
                //do something with the transport
            },
            onFailure: function(error) {
                //throw a nice exception
            },
            onComplete: function() {
                requestInProcess = false;
            }
        }
    );
}

function requestSomeStuffB() {
    clearTimeout(timer);

    if(requestInProcess) {
        //wait again for a while
        timer = window.setTimeout("requestSomeStuffB()", 10); //timeout in miliseconds
    }
    else{
        //execute the next Ajax request
    }
}
</script>

Когда вы вызываете сначала requestSomeStuffA, а затем requestSomeStuffB, requestSomeStuffB будет ожидать завершения requestSomeStuffA. Надеюсь, что это полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...