最近的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. 从SqlServer现有数据生成Insert脚本

    步骤1,打开"Generate and Publish Objects"向导.右键点击要导出数据的数据库,选择Taks->GenerateScript 步骤2,选择要导出数据 ...

  2. xamarin.android之 Android 4.4+ 获取图片真实路径

    Android 4.4以下 选择图片是可以获取到图片路径的.高于Android 4.4获取图片路径只是获取到一个图片编号. 所以需要针对Android版本进行路径解析: #region 高于 v4.4 ...

  3. Error during installing HAXM, VT-X not working 在安装HAXM错误,开始不工作

    最佳答案 (Best Answer) Some antivirus options prevent Haxm installation. ie: Avast : settings (parametre ...

  4. [转载]iTOP-4412开发板搭建最小linux系统

    本文转迅为电子论坛:http://www.topeetboard.com 最小linux系统所需资料下载:http://pan.baidu.com/s/1kTNan0j 开发板不仅可以运行Androi ...

  5. Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收

    很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...

  6. 基础KMP两道

    1. HDU 1711 Number Sequence 代码: #include <iostream> #include <cstdio> #include <cstri ...

  7. Android数据存储(二)----PreferenceFragment详解

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. [反编译U3D]Decompile Unity Resources

    工具说明 反编译unity project资源文件,包括ios,android,pc等平台资源,仅供学习使用! 以下工具任选其一,未有特殊说明是可以同时提取unity3.x,unity4.x,unit ...

  9. Linux平台Java调用so库-JNI使用例子

    1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数.如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/t ...

  10. c#中结构体(struct)和类(class)的区别

    一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...