jquery-ajax-async之浏览器差异
最近的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之浏览器差异的更多相关文章
- jQuery ajax在IE浏览器的跨域问题--jquery.xdomainrequest.min.js
jquery.ajax 加载数据, chrome, firefox, IE10+ 都可以顺利加载数据,但是IE9及以后版本不执,通过执行 jquery.ajax error 函数显示未执行 拒绝访问. ...
- jQuery ajax async
jQuery 同步调用: jQuery.ajax({ type:'POST', async: false, url:'qcTask/add', contentType:'application/jso ...
- jQuery Ajax async=>false异步改为同步时,导致浏览器假死的处理方法
今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下: /** * 异步当前用户 ...
- [jQuery]ajax请求导致浏览器崩溃
$("#xxx").val() not $("#xxx") 如果忘记加上.val()会导致chrome崩溃
- jquery ajax jsonp跨域调用实例代码
今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...
- jquery的$.ajax async使用详解
async在jquery ajax中是一个同步参数了,我们下面来给大家介绍在jquery ajax中使用async时碰到的一些问题与方法介绍,希望例子能给各位同学带来一些帮助哦. async默 ...
- jQuery ajax 当async为false时解决同步操作失败的问题
jQuery的ajax,当async为false时,同步操作失败.解决方案,jqueryasync 最近做项目遇到jQuery的ajax,当async为false时,同步操作失败的问题,上网搜索下,得 ...
- jquery ajax属性async(同步异步)示例
在jquery的ajax中如果我们希望实现同步或者异步我们可以直接设置async发生为真或假即可true false,下面举几个jquery ajax同步和异步实例 例1.jquery+ajax/&q ...
- JQ,JQuery的ajax卡住了,浏览器页面卡住
在使用ajax的时候浏览器卡住了, 经过测试是因为在ajax中使用的data数据变量写错了 不存在也不报错,直接卡主了 好好检查一下吧.
- jQuery Ajax使用实例
<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script> <scr ...
随机推荐
- 从SqlServer现有数据生成Insert脚本
步骤1,打开"Generate and Publish Objects"向导.右键点击要导出数据的数据库,选择Taks->GenerateScript 步骤2,选择要导出数据 ...
- xamarin.android之 Android 4.4+ 获取图片真实路径
Android 4.4以下 选择图片是可以获取到图片路径的.高于Android 4.4获取图片路径只是获取到一个图片编号. 所以需要针对Android版本进行路径解析: #region 高于 v4.4 ...
- Error during installing HAXM, VT-X not working 在安装HAXM错误,开始不工作
最佳答案 (Best Answer) Some antivirus options prevent Haxm installation. ie: Avast : settings (parametre ...
- [转载]iTOP-4412开发板搭建最小linux系统
本文转迅为电子论坛:http://www.topeetboard.com 最小linux系统所需资料下载:http://pan.baidu.com/s/1kTNan0j 开发板不仅可以运行Androi ...
- Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收
很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...
- 基础KMP两道
1. HDU 1711 Number Sequence 代码: #include <iostream> #include <cstdio> #include <cstri ...
- Android数据存储(二)----PreferenceFragment详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- [反编译U3D]Decompile Unity Resources
工具说明 反编译unity project资源文件,包括ios,android,pc等平台资源,仅供学习使用! 以下工具任选其一,未有特殊说明是可以同时提取unity3.x,unity4.x,unit ...
- Linux平台Java调用so库-JNI使用例子
1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数.如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/t ...
- c#中结构体(struct)和类(class)的区别
一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...