jQuery AJAX在keyup上发送多个API调用。怎么避免呢?

时间:2015-10-23 10:49:01

标签: jquery ajax api

输入文本maxlength的{​​{1}}属性已定义为14。

以下代码在我(#gtin) paste (CTRL+V)输入时对API进行2次调用。但是,如果我手动输入值,则只有一次调用,一旦长度等于14:

values (with length = 14)

我认为$('#gtin').on('keyup',function(){ if($("#gtin").val().length > 13) { var gtin = $("#gtin").val(); $.ajax({ type: 'GET', url: 'https://api.priceapi.com/products/single?token=*Masked*&country=de&source=google-shopping&currentness=daily_updated&completeness=one_page&key=gtin&value=' + gtin, async: false, contentType: "application/json", dataType: 'jsonp', success: function(json) { console.dir(json); } }); } }); CTRL + V为2 counts,因此会发生双重调用。因此,当定义的输入长度等于14时,是一种更智能的API调用方式吗?哪个是绕过多个电话的最好方法,如果f.i.有人在输入' keyups已经到达的情况下仍在键入密钥?

4 个答案:

答案 0 :(得分:0)

您可以检查ctrl键是否触发了事件:

$('#gtin').on('keyup',function(e){

    if (!e.ctrlKey) {

        // Your ajax call

    }

});

答案 1 :(得分:0)

丑陋的解决方案,但会做到......

var ajaxRequestMade = false;
$('#gtin').on('keyup',function(){
  var len = $("#gtin").val().length;

  if (len > 13 && !ajaxRequestMade) {
    ajaxRequestMade = true;
    $.ajax(...);
  }
  // Optionally reset it
  if (len < 14) {
    ajaxRequestMade = false;
  }
});

答案 2 :(得分:0)

您可能希望使用$("#gtin").val()而不是使用this.value进行两次函数调用。此处的上下文this是您的input框,只要您不通过将另一个对象绑定到您的未知函数来更改它。

答案 3 :(得分:0)

906609