我遇到一个非常奇怪的问题,click会有两次连接动作我使用jquery的动态载入js代码功能,根据需要来加载相应的js程序通常这个载入工作算是正常,但有时却出现异常重新加载页面后,刚出问题的位置就不一定会再出问题总之很随机比如以下代码
当点击对应的对象时,会触发去加载js文件,并执行文件里的函数 $('#project').click(function(){
if(typeof(global_js.project) == 'undefined'){
$.ajax({type:'get',
url:"js/project.js",
dataType:'script',
cache:gim.ajax_cache,
success:function(){
global_js.project=true;
load_project_page();
}});
}else{
load_project_page();
}
});
这时,程序正常工作时,通过firebug看到的过程如图
当出现问题时,出现如下图也就是jquery会加载文件两次,但某个连接会被阻塞
从而导致ajax的success 操作无法处理使用POST或是GET的都有类似情况
如,以下代码是POST数据,有时也会出现提交两次情况
$('#project_business_ul .delete').livequery('click',function(){
d = new Object();
d.t = 'delete';
d.bid=bid;
d.pid=pid;
d.cost=cost;
d.name=escape(name);
$.ajax({type:'post',
url:"project_summary.php",
dataType:'json',
data:{d:JSON.stringify(d)},
success:function(h){
if(h != null) {
switch(h.php_status) {
case 'ok':
break;
}
}
}});
});
如图
当然实现提交到服务器端的连接只有一次,毕竟对数据的写操作只有一次所以我觉得是jquery ajax的代码有点问题哪位有办法解决吗?
当点击对应的对象时,会触发去加载js文件,并执行文件里的函数 $('#project').click(function(){
if(typeof(global_js.project) == 'undefined'){
$.ajax({type:'get',
url:"js/project.js",
dataType:'script',
cache:gim.ajax_cache,
success:function(){
global_js.project=true;
load_project_page();
}});
}else{
load_project_page();
}
});
这时,程序正常工作时,通过firebug看到的过程如图
当出现问题时,出现如下图也就是jquery会加载文件两次,但某个连接会被阻塞
从而导致ajax的success 操作无法处理使用POST或是GET的都有类似情况
如,以下代码是POST数据,有时也会出现提交两次情况
$('#project_business_ul .delete').livequery('click',function(){
d = new Object();
d.t = 'delete';
d.bid=bid;
d.pid=pid;
d.cost=cost;
d.name=escape(name);
$.ajax({type:'post',
url:"project_summary.php",
dataType:'json',
data:{d:JSON.stringify(d)},
success:function(h){
if(h != null) {
switch(h.php_status) {
case 'ok':
break;
}
}
}});
});
如图
当然实现提交到服务器端的连接只有一次,毕竟对数据的写操作只有一次所以我觉得是jquery ajax的代码有点问题哪位有办法解决吗?
if(global_js.project==0) {global_js.project=1;AJAX请求(成功后设global_js.project=2并执行JS函数)}
if(global_js.project==1) {return ;}//直接退出,等待AJAX结果返回。
if(global_js.project==2) {直接执行JS函数};
等到success之后才removeAttribute("disabled")
[查看你的get传值是不是超出的范围,get传值一般也就Max 1024]
2.使用ansync:false;设置为同步
$('#page_data').click(function(){
t=$(this);
if(t.hasClass('disabled')) return;
t.addClass('disabled');
$.ajax({type:'post',
url:"test/test1.php",
success:function(h){
t.removeClass('disabled');
},
error:function(){
t.removeClass('disabled');
}
});
});
通过这个办法可以避免快速两次点击造成的问题,所有有必要判断的功能都得加这个处理代码。忘记说了,我的测试环境是 firefox 3.6.12从昨天到现在的测试过程中,我发好像只有firefox出现这种问题
我又去看了看jquery的站点发现有1.4.4下载,就下载了个未压缩的版本在出现同样问题时,firebug提示了具体的行号xhr.send( noContent || s.data == null ? null : s.data ); 我就试试其他浏览器会不会有同样的问题opera,chrom,safari,ie ,测试点击了近百次,尚未出现问题,难道会是firefox的问题?
回samxieyj5,谢谢回复
cache的值默认是不缓存的,我加的变量也是false,待网站写完了,就可以改为true了
我现在的问题,不仅是加载js时出现两次连接问题,连click这样的事件‘有时’也出现两次连接就是这个‘有时’,它是随机的现象,让人头痛