如何在jquery中中止同步ajax请求?

时间:2017-09-12 10:55:09

标签: javascript jquery ajax validation

我试图在validator.addMethod jquery验证中集成ajax请求。

我们说我有一个像

这样的输入字段
Amount : [ text box ]

其验证规则是

$('.form').validate({
....
...
amount:{ amt_val : true }
..
});

add validator方法是

$.validator.addMethod("amt_val", function(value, element){
 $.ajax({
  type: 'POST',
  async:false,
  ...
  ...
  success:function(res){
   // return true or false
  }
 });
});

注意:我在这里使用 async:false 的原因是,验证器在ajax请求完成之前返回false。
因此,每次我输入金额时,它都会通过ajax进行验证。如果我连续输入金额值,我想中止之前的ajax请求。
我试过this solution喜欢

var xhr = null;
$.validator.addMethod("amt_val", function(value, element){
if(xhr != null) { xhr.abort(); xhr = null; }
 xhr = $.ajax({
  type: 'POST',
  async:false,
  ...
  ...
  success:function(res){
   // return true or false
  }
 });
});

但它仅适用于异步请求。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

首先停止使用同步请求。您非常清楚原因。 接下来,出于验证目的,您可以使用仅在异步ajax完成时调用的回调函数。

使用同步ajax请求解决您的问题将导致UI阻塞,直到请求完成。因此,从逻辑上和技术上来讲,您只能在前一个同步请求完成后再执行下一个同步请求。因此,中止先前的同步ajax请求是不可能的!

相反,只有在用户完成输入时,才可以模拟验证ajax调用。这可以通过读取在输入元素旁边放置验证按钮的输入中按下的Enter键来实现。

希望有帮助。