这两天做了个一个网站,用到了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判断,还是没用,还是经常输出这个东西:
当你服务器的处理能力小于你提交的速度时,就会出现这种情况,最好的做法的是防止多次提交,用一个全局变量去控制,服务器返回成功后改变全局变量,提交前也改变全局变量,这样就可以了
最后,发现原来是vs2008自带的web server,性能不行,换成了IIS 就正常了,谢谢!
@肥燕子: 呵呵,这事情都是要考虑的,IIS也有性能不行的时候(并发请求多的时候),也会出现这种情况,不客气:)
关注。。。
用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"]);
}
其实无论用jquery,还是自己手写的,都没有任何问题,在FF,opera,chrome下没有任何问题,IE下也是没问题的,就是你在IE下频繁,快速的提交,有问题,经常得不到后台的值,alert一个null,或者就是没有任何反映了,l还是谢谢你的回答。
我觉得你应该是在提交之前将按钮置灰,在回调函数里面讲按钮设置为可用
按钮没问题,就是一个简单的input,onclick我连样式都没来得及写。
去掉 delete语句就可以了