首页 新闻 会员 周边

ajax回调函数,IE下有时候不执行,死掉了,求助

0
悬赏园豆:100 [已解决问题] 解决于 2012-03-12 09:00

这两天做了个一个网站,用到了AJax,本来是用的jquery的ajax,但是后来,就是提交数据老出问题,就换回了自己手写的,但是在FF下执行没问题,IE9下也没问题,但是后来发现,在IE9下不断的,快速的点击提交的时候,AJAX的回调函数,就不执行了,好像死掉了,即使执行,也是给我个alert一个null,真的好奇怪,求高手出手相救。

前台:

 function pubmytask() {
if (CheckName() && CheckPhone() && CheckEmail() && CheckInfo()) {
var myname = $.trim($('#tbperson').val());
var mytel = $.trim($("#tbphone").val());
var myemail = $.trim($("#tbemail").val());
var myinfo = $.trim($("#tbtaskinfo").val());
var mycode = $.trim($("#tbcode").val());
var xmlhttp = getAjax();
xmlhttp.open("POST", "PubTask.ashx?rnd="+ Math.random(), true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
{
alert(xmlhttp.responseText);
$('#loading').html("");
delete xmlhttp;
}
}
}
}
xmlhttp.send("myname=" + escape(myname) + "&mytel=" + mytel + "&myemail=" + myemail + "&myinfo=" +myinfo);
$('#loading').html("正在发布中......");

}

}

后台很简单,就是做实验用的,输出一个随机数

<%@ WebHandler Language="C#" Class="PubTask" %>

using System;
using System.Web;

public class PubTask : IHttpHandler {

public void ProcessRequest (HttpContext context) {

if (context.Request.QueryString["rnd"] != null)
{
context.Response.ContentType = "text/plain";
context.Response.Write(context.Request.QueryString["rnd"]);
}
}

public bool IsReusable {
get {
return false;
}
}

}
问题补充:

回调又加了一个判断,在xmlhtp.status==200的后面,加了个else判断,还是没用,还是经常输出这个东西: 


肥燕子的主页 肥燕子 | 初学一级 | 园豆:92
提问于:2012-03-09 18:58
< >
分享
最佳答案
1

当你服务器的处理能力小于你提交的速度时,就会出现这种情况,最好的做法的是防止多次提交,用一个全局变量去控制,服务器返回成功后改变全局变量,提交前也改变全局变量,这样就可以了

收获园豆:100
az235 | 大侠五级 |园豆:8483 | 2012-03-12 08:52

最后,发现原来是vs2008自带的web server,性能不行,换成了IIS 就正常了,谢谢!

肥燕子 | 园豆:92 (初学一级) | 2012-03-12 09:02

@肥燕子: 呵呵,这事情都是要考虑的,IIS也有性能不行的时候(并发请求多的时候),也会出现这种情况,不客气:)

az235 | 园豆:8483 (大侠五级) | 2012-03-12 09:03
其他回答(3)
0

关注。。。

用jquery提交数据在是所有的IE浏览器中都不成功吗,是某个IE版本中不成功啊?

一个小例子:

ajax脚本:

<script type="text/javascript">       

  $(document).ready(function() {          

      $("input[name='btn']").click(function() {      

           $.ajax({                

                 url: "Handler.ashx",              

                 type: "post",    

                 data: { id: "aaa" },

                 success: function(data, textStatus) {    

                       alert(data);             

                 }             

          });          

      });        

 });    

 </script>

html代码:

<input type="button" value="getvalue" name="btn"/>

ashx代码:

 public void ProcessRequest (HttpContext context) {     

       context.Response.ContentType = "text/plain";    

       context.Response.Write(context.Request.Form["id"]);

 }  

KivenRo | 园豆:1734 (小虾三级) | 2012-03-09 21:54

其实无论用jquery,还是自己手写的,都没有任何问题,在FF,opera,chrome下没有任何问题,IE下也是没问题的,就是你在IE下频繁,快速的提交,有问题,经常得不到后台的值,alert一个null,或者就是没有任何反映了,l还是谢谢你的回答。

支持(0) 反对(0) 肥燕子 | 园豆:92 (初学一级) | 2012-03-10 08:33
0

我觉得你应该是在提交之前将按钮置灰,在回调函数里面讲按钮设置为可用

小小刀 | 园豆:1991 (小虾三级) | 2012-03-09 23:16

按钮没问题,就是一个简单的input,onclick我连样式都没来得及写。

支持(0) 反对(0) 肥燕子 | 园豆:92 (初学一级) | 2012-03-10 08:34
0

去掉 delete语句就可以了

此山之玉 | 园豆:205 (菜鸟二级) | 2012-03-10 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册