当呼叫太频繁时,ajax会给我相同的数据

时间:2014-03-28 03:21:17

标签: javascript ajax loops exit

我有一个条形码枪,当我扫描条形码时它将运行以下功能,但是当我扫描5-6条形码太快时它会提供重复数据

此外,我需要异步才能成为现实,否则它会很慢 有没有办法解决这个问题,所以我没有重复数据?

function getUnReadBox() { 

$("#unReadBoxList").children().remove('li') ; 

$.ajax({ 
        dataType: "json",
        url: xxxx.php ,     
        success: saveUnRead , 
        error: function ( xhr , b , c ) { 
            $("#reportMsg").html ( "error" ) ;  },
        async: true }); 

}

function saveUnRead ( json ) { 

var i ; 
var new_item ; 
var msg ; 

for ( i in json ) { 
    new_item = '<li>' + json[i].PACKAGE_ID + "</li>" ; 
    $("#unReadBoxList").append ( new_item ) ; 
    scShipping.unReadBox ++ ; 

    $("#unReadBox").html ( msg ) ; 
}
$("#unReadBoxList").listview('refresh') ;
}

修改

我添加了

$("#unReadBoxList").children().remove('li') ; 
 var d = new Date();
 var num = d.getTime();

var mySQL = scShipping.jsonUrl+'scTripUnRead.php?T='+scShipping.tripId+"&O="+scShipping.whichOp+"?date="+num ; 

$.ajax({ 
        dataType: "json",
        url: mySQL ,     
        success: saveUnRead , 
        error: function ( xhr , b , c ) { 
            $("#reportMsg").html ( "error" ) ;  },
        async: true }); 

}

但我仍然得到重复的数据

3 个答案:

答案 0 :(得分:0)

我遇到了和以前一样的问题。我得到的解决方案是在调用php程序时传入数字时间戳作为参数,或者传入日期作为参数。例如:

xxxx.php?date = 2014-03-28 20:54:52:03

它对我有用,我希望它也适合你......

答案 1 :(得分:0)

这种情况可能是因为网络浏览器缓存了您请求的数据,避免这种情况您可以尝试这些:

  1. 在您的请求中使用POST代替GET。在POST方法的参数中将type分配给$.ajax

  2. 禁用缓存。在false方法的参数中将cache分配给$.ajax

  3. 将附加参数和值附加到网址,随机数或时间戳,例如xxxx.php?t=Math.random()xxxx.php?t=new Date()。这些确保您的请求网址不同,并且不会缓存响应数据。

答案 2 :(得分:0)

就像@ user3311636建议的那样,你可以在你的Ajax调用代码上添加一个额外的参数。因此服务器或浏览器不会缓存响应。

尝试这样(这是@ user3311636答案,我只是为了清晰目的而包含整个功能)

$.ajax({ 
    dataType: "json",
    url: "xxxx.php?date=2014-03-28 20:54:52:03" ,     
    success: saveUnRead , 
    error: function ( xhr , b , c ) { 
        $("#reportMsg").html ( "error" ) ;  },
    async: true });