2012-05-19 2 views
2

Я хочу, чтобы избежать предыдущего запроса Ajax на вызов тот же запрос Ajax снова в JQueryИзбегайте предыдущий запрос Ajax на вызов тот же запрос Ajax снова в JQuery

<input type="text" id="username" onkeyup = "userName(this)" > 



function userName(e) { 
    $.ajax({ 
     type:"POST", 
     url:BasePath + "https://stackoverflow.com/users/userName", 
     data:"name=" + $.trim($(e).val()), 
     success:function (resp) { 
     if (resp == 1) { 
      $('#div.error_message').html('Username already taken...').show(); 
     } else { 
      $('#div.error_message').hide(); 
     } 
     } 
    }); 
} 
+0

вы хотите только 1 Ajax запрос произойдет в то время, это ? – Dhiraj

ответ

1

Вы можете использовать .abort()

<input type="text" id="username" onkeyup = "userName(this)" > 


<script>var xhr=null; 
function userName(e) { 
    if(xhr)xhr.abort();//first time it will not be aborted 
    xhr=$.post(BasePath + "https://stackoverflow.com/users/userName",{"name": $.trim($(e).val())},function (resp) { 
     if (resp == 1) { 
      $('#div.error_message').html('Username already taken...').show(); 
     } else { 
      $('#div.error_message').hide(); 
     } 
     }); 
}</script> 

Использование $ .post вместо $ .ajax, как это упрощенная и короткая форма $ .ajax

+0

Использование '$ .post' увеличит производительность? –

+0

Я не уверен, что это короткая форма $ .ajax, но это сделает ваш код коротким, не причинив никакого вреда. –

+0

Я думаю, что код нужно отредактировать, чтобы удалить объявление переменной в post request, то есть 'xhr = $. Post (BasePath ... 'not' var xhr = $. post (BasePath ... ' –

0
var ajaxReq; 
function userName(e) { 

    if(ajaxReq){ 
     ajaxReq.abort(); 
     //OR you may return from here as 
     //another request is already in progress 
    } 

    ajaxReq = $.ajax({ 
     type:"POST", 
     url:BasePath + "https://stackoverflow.com/users/userName", 
     data:"name=" + $.trim($(e).val()), 
     success:function (resp) { 
      if (resp == 1) { 
       $('#div.error_message').html('Username already taken...').show(); 
      } else { 
       $('#div.error_message').hide(); 
      } 
      ajaxReq=null; 
     } 
    }); 
} 
Смежные вопросы