最近的PC项目遇到了一个问题,日志记录程序会在1s内多次发起对首页的请求,一时间没有找到原因。

简单描述一下问题:访问一个首页的时候,由于代码质量不高的原因,访问就连接数据库,但是同时存在的问题是一秒了多次发起了对首页的请求,请求中包含/favicon.ico(如此能不能判断是浏览器发起的呢?),也就导致了数据库出现很多连接,到此引起的连锁反应就是服务器内存占用飙升,接着就是卡卡卡……

由于能力不足的原因,一时间排查不出问题的原因,找不到很好的解决方案,找到了一个临时的方案“生成静态首页”。不过后期查看日志,在index.html存在的情况下,还是会出现请求404的问题(无解)。

生成静态首页也很愉快,于是很快就把补丁给打上去了,相反也就遇到了今天的问题,在此予以记录。

愉快的模拟了一个场景:

html代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jquery-ajax-async</title>
</head>
<body>
<button id="testAsync">测试</button>
<script src="script.js"></script>
<script>
$("#testAsync").bind("click", function() {
$.ajax({
url:"http://demo.pushself.com/index.php",
success:function(d){
if(d.result=="OK"){
alert("生成成功!");
}
},
//async:false,
dataType:"json"
});
console.log(this);
});
</script>
</body>
</html>

php代码

<?php
sleep(3);
echo json_encode(array('result'=>'OK'));
?>

在注释async: false 的时候,async的默认值是true,连续点击3次测试

IE:连续输出3次<button id="testAsync">测试</button>,3秒后连续弹出3次生成成功

非IE:连续输出3次<button id="testAsync">测试</button>,3秒后依次弹出3次生成成功

如图:

在取消注释async: false 后,连续点击3次测试

IE:3秒后弹出1次生成成功,输出1次<button id="testAsync">测试</button>

非IE:3秒后依次弹出3次生成成功,输出3次<button id="testAsync">测试</button>,而且会提示:Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.

如图:

如图:

看到上面的结果,暂且不说alert的事情。异步情况下,IE与非IE浏览器处理的方式是一样的。同步的时候,IE是单线程的,非IE却不是单线程处理。非IE会出现提示ajax同步请求在主线程中不利于用户体验,被弃用了,可见用户体验的重要性。

最后还是需要换取另外的方式来阻止用户多次点击:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jquery-ajax-async</title>
</head>
<body>
<button id="testAsync">测试</button>
<script src="script.js"></script>
<script>
var testAsyncEle = $("#testAsync"),
createIndex = function() {
testAsyncEle.unbind();
$.ajax({
url:"http://demo.pushself.com/index.php",
success:function(d){
if(d.result=="OK"){
alert("生成成功!");
testAsyncEle.bind("click", createIndex);
}
},
//async:false,
dataType:"json"
});
console.log(this);
};
testAsyncEle.bind("click", createIndex);
</script>
</body>
</html>

jquery-ajax-async之浏览器差异的更多相关文章

  1. jQuery ajax在IE浏览器的跨域问题--jquery.xdomainrequest.min.js

    jquery.ajax 加载数据, chrome, firefox, IE10+ 都可以顺利加载数据,但是IE9及以后版本不执,通过执行 jquery.ajax error 函数显示未执行 拒绝访问. ...

  2. jQuery ajax async

    jQuery 同步调用: jQuery.ajax({ type:'POST', async: false, url:'qcTask/add', contentType:'application/jso ...

  3. jQuery Ajax async=>false异步改为同步时,导致浏览器假死的处理方法

    今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下: /** * 异步当前用户 ...

  4. [jQuery]ajax请求导致浏览器崩溃

    $("#xxx").val() not $("#xxx") 如果忘记加上.val()会导致chrome崩溃

  5. jquery ajax jsonp跨域调用实例代码

    今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...

  6. jquery的$.ajax async使用详解

      async在jquery ajax中是一个同步参数了,我们下面来给大家介绍在jquery ajax中使用async时碰到的一些问题与方法介绍,希望例子能给各位同学带来一些帮助哦.   async默 ...

  7. jQuery ajax 当async为false时解决同步操作失败的问题

    jQuery的ajax,当async为false时,同步操作失败.解决方案,jqueryasync 最近做项目遇到jQuery的ajax,当async为false时,同步操作失败的问题,上网搜索下,得 ...

  8. jquery ajax属性async(同步异步)示例

    在jquery的ajax中如果我们希望实现同步或者异步我们可以直接设置async发生为真或假即可true false,下面举几个jquery ajax同步和异步实例 例1.jquery+ajax/&q ...

  9. JQ,JQuery的ajax卡住了,浏览器页面卡住

    在使用ajax的时候浏览器卡住了, 经过测试是因为在ajax中使用的data数据变量写错了 不存在也不报错,直接卡主了 好好检查一下吧.

  10. jQuery Ajax使用实例

    <script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script> <scr ...

随机推荐

  1. nyoj 712 探 寻 宝 藏--最小费用最大流

    问题 D: 探 寻 宝 藏 时间限制: 1 Sec  内存限制: 128 MB 题目描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有 ...

  2. nyoj 1029/hdu 3714 Error Curves 三分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3714 懂了三分思想和F(x)函数的单调性质,这题也就是水题了 #include "stdio ...

  3. 网站日志实时分析工具GoAccess使用

    网站日志实时分析工具GoAccess使用 系统环境CentOS release 5.5 (Final) GoAccess是一款开源的网站日志实时分析工具. GoAccess 的工作方式就是读取和解析 ...

  4. hdu 4848 Wow! Such Conquering! (floyd dfs)

    Wow! Such Conquering! Problem Description There are n Doge Planets in the Doge Space. The conqueror ...

  5. UEdit初始化加载内容偶尔失败,解决

    var ue1 = UE.getEditor('aaa',{toolbars: [],autoHeightEnabled: false}); $(function(){ var content =$( ...

  6. virtualbox 在window10上的兼容性调整

    更新完windows10后,打开当时的virtualbox 4.3.3已经是最新的啦,打开原来安装的几个虚拟机(hadoop),发现均失败. 打开setting一看,网络一栏有问题,桥接模式的虚拟机都 ...

  7. 谈MongoDB读取连接超时的异常

    今天在现场的哥们发来异常,让我解决,错误信息如下: HTTP Status 500 - Read operation to server 192.168.1.110:20001 failed on d ...

  8. NOIP2008 普及组T3 传球游戏 解题报告-S.B.S.

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  9. codeforces 713B B. Searching Rectangles(二分)

    题目链接: B. Searching Rectangles time limit per test 1 second memory limit per test 256 megabytes input ...

  10. UVALive 5966 Blade and Sword -- 搜索(中等题)

    题意:给一幅地图,P为起点,D为终点,'*'为传送阵,到达传送阵可以传到任意一个其他的传送阵,传到以后可以正常走或者再传回来,问P->D最短步数. 分析:这题一定要细心,分析要到位才能搞定,错一 ...