您的位置:首页 > Web前端 > JQuery

【jQuery学习笔记】关于jQuery1.6.1版的ajaxstart不执行问题解决方案

2011-09-13 20:08 956 查看
以前在学习jQuery的ajax时,遇到了在1.6版的ajaxStart不执行问题,在csdn上面曾经发过贴(原文),前几天看到网友blackgull提供了jQuery1.6版的兼容方案,觉得很有必要重新整理下,便于自己查阅,以及有需要的朋友。具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>全局Ajax事件应用示例 </title>
<style type="text/css">
button, div, li, a {
font-size: 12px;
font-family: Tahoma;
}

#loading {
display: none;
}
</style>
<script type="text/javascript" src="jquery-1.6.1.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
$.ajaxSetup({
cache:false,
});
$("#loading").ajaxStart(function(){
$(this).show();
}).ajaxStop(function(){
$(this).hide();
}).ajaxError(function(){
alert("error");
});
$("button").click(function(){
var url ="http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?";
$.getJSON(url,function(data){
$.each(data.stories, function(i, story){
var content =" <li> <a href='"+ story.href +"' target='_blank'>"+ story.title +" </a>";
$("#res ul").append(content);
if (i ==3)
returnfalse;
});
});
//                    $.ajax({
//                        url: url,
//                        data: {
//                            "appkey": "appkey=http%3A%2F%2Fmashup.com",
//                            "type": "javascript"
//                        },
//                        dataType: "jsonp",
//                        cache: false,
//                        Type: "GET",
//                        success: function(data){
//                            $.each(data.stories, function(i, story){
//                                var content = " <li> <a href='" + story.href + "' target='_blank'>" + story.title + " </a>";
//                                $("#res ul").append(content);
//                                if (i == 3)
//                                    return false;
//                            });
//                        }
//                    })

});
});
</script>
</head>
<body>
<button>
加载数据
</button>
<div id="loading">
数据加载中... <img src="images/ajax-loader.gif"/>
</div>
<div id="res">
<ul type="square">
</ul>
</div>
</body>
</html>


  我的想法是:发送请求后,出现加载动画,完成后动画消失。

  可是得到的实际效果却是第一次有动画,第二次又没有动画了,后来根据zell419jiangguoliao等网友的提醒,添加随机数,取消缓存,但还是失败。然后自己试了下$.ajax({cache:false})(注释部分)以及使用ajaxSetup(),还是不成功。

  后来换了jquery-1.4.2版的,成功显示了。于是这里写了2种解决方案,代码如下:

  1.换个库就OK

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>全局Ajax事件应用示例</title>
<style type="text/css">
button, div, li, a {
font-size: 12px;
font-family: Tahoma;
}

#loading {
display: none;
}
</style>
<script type="text/javascript" src="jquery-1.4.2.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
var url ="http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?";
$.getJSON(url, function(data){
$.each(data.stories, function(i, story){
var content ="<li><a href='"+ story.href +"' target='_blank'>"+ story.title +"</a>";
$("#res ul").append(content);
if (i ==3)
returnfalse;
});
});
});
$("#loading").ajaxStart(function(){
$(this).show();
}).ajaxStop(function(){
$(this).hide();
});
});
</script>
</head>
<body>
<button>
加载数据
</button>
<div id="loading">
数据加载中...<img src="images/ajax-loader.gif"/>
</div>
<div id="res">
<ul type="square">
</ul>
</div>
</body>
</html>


  2.另一种是有csdn网友izgnaw提供的方法,对库没有限制

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>全局Ajax事件应用示例</title>
<style type="text/css">
button, div, li, a {
font-size: 12px;
font-family: Tahoma;
}

#loading {
display: none;
}
</style>
<script type="text/javascript" src="jquery-1.6.1.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$("#loading").show();
var url ="http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?";
$.getJSON(url,function(data){
$.each(data.stories, function(i, story){
var content ="<li><a href='"+ story.href +"' target='_blank'>"+ story.title +"</a>";
$("#res ul").append(content);
if (i ==3)
returnfalse;
$("#loading").hide();
});
});

});
});
</script>
</head>
<body>
<button>
加载数据
</button>
<div id="loading">
数据加载中...<img src="images/ajax-loader.gif"/>
</div>
<div id="res">
<ul type="square">
</ul>
</div>
</body>
</html>


  最后提供在jquery-1.6.1版本下,用ajaxStart实现:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>全局Ajax事件应用示例</title>
<style type="text/css">
button, div, li, a {
font-size: 12px;
font-family: Tahoma;
}

#loading {
display: none;
}
</style>
<script type="text/javascript" src="jquery-1.6.1.js">
</script>
<script type="text/javascript">
19             jQuery.ajaxPrefilter(function( options ) {
20                 options.global =true;
21             });
$(document).ready(function(){
$("#loading").ajaxStart(function(){
$(this).show();
}).ajaxStop(function(){
$(this).hide();
});
$("button").click(function(){
console.log('abc');
var url ="http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?";
$.getJSON(url,function(data){
$.each(data.stories, function(i, story){
var content ="<li><a href='"+ story.href +"' target='_blank'>"+ story.title +"</a>";
$("#res ul").append(content);
if (i ==3)
returnfalse;
});
});
});
});
</script>
</head>
<body>
<button>
加载数据
</button>
<div id="loading">
数据加载中...<img src="images/ajax-loader.gif"/>
</div>
<div id="res">
<ul type="square">
</ul>
</div>
</body>
</html>


  在1.6.3版下也有效果。

PS: 第一次放到首页,菜鸟刚刚学习怎么写博客,如果有疏漏,欢迎大家给我批评和指正!或者给我留言!

参考资料:1.在CSDN上曾经发的贴

     2.jQuery BUG Tracker

     3.jQuery API -AJAX
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐