多个AJAX请求问题总结

我们常常会遇到在一个页面上有多个AJAX请求的情况。这些AJAX请求有可能是互不相关的。也有可能是互相影响的。这里总结一下多个AJAX之间会存在一定影响的情况。

而相互影响的数据也会分为不同的情况。我接触过的主要有:
1.多个AJAX返回的是同一个数据的不同部分。我们需要在前端把这些数据组合成一个完整的数据来运用。我们要知道这些数据的次序来够正确拼接。
2.不同查询条件下的同一组数据。(我们可能需要的是最新的一组数据)。
3.后面的AJAX要用到的前面AJAX的数据。

不考虑应用场景,只说获得AJAX返回顺序的方法。用过的主要有下面几种:
1.递归,在回调函数中执行下一个AJAX。问题是如果中间某一个AJAX没有正常返回,后面的AJAX就有不执行的风险。所以可能需要做一些特别的处理。
2.同步AJAX。 不是很推荐。浏览器分分钟失去响应。严重影响用户体验。
3.方法三.从回调函数上面想办法。可以用闭包来记录当前是第几组的AJAX请求,回调函数中读取。正常发起AJAX请求即可。
4.前后台的协商。对于不需要保证返回顺序。只需要确定所返回结果是对应第几组数据的。  可以AJAX传递当前是第几组数据的标识。后台返回结果的时候再把这个标识返回过来。这样回调函数也能识别到拼装的次序。但是这种情况有限制,对于一些网络公共接口,它返回的数据不是我们能左右的。

其中数据有依赖关系的可选择1,2。
数据无依赖关系但是要知道数据顺序的可使用1,2,3,4。

一些需要多个AJAX场景应用参考:
一、选择查询条件并隔一段时间实时刷新,双如实时显示地图绘制。实时绘制图表等等。后面的数据要刷新前面的数据。比如状态的实时更新。
1.更新了查询条件。中断当前所有AJAX请求。清空AJAX序列的数组。发起AJAX请求。是定时发送请求。隔一段时间发起一次请求。
2.未更新查询条件。隔一段自动刷新数据。理论上我们只需要最新一组数据。
    (1)设置超时,超时的时间不要超过请求的间隔。这样当发起新的AJAX的时候。上一个AJAX已经返回结果或者超时取消了。
    (2)如果网络条件特别差。超时的时间或两次AJAX请求之间的间隔又比较短的话。如果我们超时时间比请求时间短。那就可能一组数据都拿不下来。页面一直处于发呆状态。。。所以一种方案是不设置超时,能拿下来一组数据是一组数据。拿到数据之后再清除AJAX序列中此请求前面的AJAX请求或者简单点中断当前所有在请求的AJAX。  

二、百度地图批量座标转换。使用的方法三。

三。实时地图轨迹。
。。。

其他参考:
1.AJAX中断可自行查询 AJAX的abort()相关方法。
2.我封装的一个JSONP函数参考。实现了error和超时功能。http://blog.csdn.net/liusaint1992/article/details/50959571
3.AJAX序列的问题。   把所有的AJAX请求放到一个数组中去,方便控制。类似这样:       
  var xhr = $.ajax({
                url: '__SELF__',
                type: 'get',
                dataType: 'json',
                cache:false,
                data: {stationid: StationID
                },
                success:function(data){
            });
   xhrArr.push(xhr);


本文为个人使用总结,有未尽之处,错误之处也是难免。欢迎留言交流。
文章可能会有修改,转载注明出处:http://blog.csdn.net/liusaint1992/article/details/51800741

7月1号了,2016年过去一半。今年的目标实现一半了吗?




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章