Вопрос в том, хотите ли вы пропустить 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. Надеюсь, что это полезно для вас.