奇怪了,没人遇到这个问题吗,多次点击按钮提交在IE下面,有时候 xmlHttp.responseText 返回空值,有时候又是正确值,这是为什么?在xmlHttp.open("POST","simpleResponse.ashx",true)方法设置为post方式提交且异步设置为true时,当xmlHttp.send(data)方法内的参数不为空,就出现这问题了,
哪个大哥帮帮忙,好几天解决不了,我调试中发现一个问题,当simpleResponse.ashx如果加上 context.Request.Form相关代码,就不出现这问题,这是什么原理?
1.html页面代码:
<%@ Page Language="C#" AutoEventWireup="true" %>
<!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 id="Head1" runat="server">
<title></title>
<script type="text/javascript">
function createXMLHttpRequest() {
var xmlHttp = null;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
}
if (xmlHttp == null) return
data = "a=1&b=1"
xmlHttp.onreadystatechange =function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getelementbyid("innerDiv").innerHTML=xmlHttp.responseText;
}
}
};
xmlHttp.open("POST", "simpleResponse.ashx",true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-Length", data.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(data);
}
</script>
</head>
<body>
<form runat="server">
<input type="button" onclick="createXMLHttpRequest()" value="test" />
<div id="innerDiv"></div>
</form>
</body>
</html>
simpleResponse.ashx页面代码:
<%@ WebHandler Language="C#" class="simpleResponse" %>
using System;
using System.Web;
public class simpleResponse : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//int i=context.Request.Form.count;
//如果加上这句,或者 string x=context.Request.Form["abc"].tostring(); 只要加入关于Request.Form相关,就能正常返回值
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{
return false;
}
}
}
你使用的是post方式,
所有的data都在Request.Form里面。
比如: Request.Form["a"]来获取
如果你要Request.QueryString["a"], 这样把你的Url改成:simpleResponse.ashx?a=11&b=22.
朋友,你估计没注意看我遇到的问题哦,我的意思是 异步提交时,如果用POST方式提交,且在send(data)里面的data不等于null的时候,ie有时候获取到后台返回的值是空,如果后台不出现request.form的情况下,不是说客户端提交表单数据给后台,后台如何获取的问题,request.form与Request.QueryString我懂啊
@sujiaya: 你看看你是ie版本几?
然后查查MS.XMLHTTP的兼容性
@sujiaya: 还是建议直接用jQuery.ajax搞定
@无尽思绪: 每个版本的IE都会出现这问题啊,我看了下JQ,貌似他也会出这问题啊,
@sujiaya: 实际测试过? 还有这样的问题?
@无尽思绪: 嗯,有这样的问题,只是你们用的时候,要嘛用GET,要嘛用 POST的链接传值,更或者是POST同步,没像我这样弄过,所以你们没注意到而已啊
@sujiaya: 如果jquery有这样的bug, 那它的bug list肯定有这样的问题。
我还是没太明白你的问题是什么。 jq下post发送data也很正常啊。
把你jq代码贴出来看看
@无尽思绪: <%@ Page Language="C#" AutoEventWireup="true" %>
<!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 id="Head1" runat="server">
<title></title>
<script type="text/javascript">
function createXMLHttpRequest() {
var xmlHttp = null;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
}
if (xmlHttp == null) return
data = "a=1&b=1"
xmlHttp.onreadystatechange =function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getelementbyid("innerDiv").innerHTML=xmlHttp.responseText;
}
}
};
xmlHttp.open("POST", "simpleResponse.ashx",true);
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-Length", data.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(data);
}
</script>
</head>
<body>
<form runat="server">
<input type="button" onclick="createXMLHttpRequest()" value="test" />
<div id="innerDiv"></div>
</form>
</body>
</html>
simpleResponse.ashx页面代码:
<%@ WebHandler Language="C#" class="simpleResponse" %>
using System;
using System.Web;
public class simpleResponse : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//int i=context.Request.Form.count;
//如果加上这句,或者 string x=context.Request.Form["abc"].tostring(); 只要加入关于Request.Form相关,就能正常返回值
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{
return false;
}
}
}
你多点几次按钮,会发现 有时候获取到空值,你试试
代码调试了一遍,没发现LZ的问题,唯一的问题是代码错误太多了,大小写,分号什么的。
这是我复制的源文件啊,可能是博客园将特殊字符转换了,
simpleResponse.ashx后面加个随机数试试,可能是缓存了吧。
不是缓存问题哦,这些该试的我都试过了,就是找不出原因,麻烦大虾再稍微看看啊
楼主还在写这么原始的AJAX啊,太out了吧,jQuery中ajax就非常的好用,而且游览器的兼容性还是非常好的。
我自己写框架,jquery好用是好用,我不需要JQ那么多功能,我只需要基础功能,
@sujiaya: jQuery提供的功能都是最基本的功能,不是你想象的那么大,那么的复杂。
@chenping2008: 框架我已经写好了,只是有一点小问题,我必须了解这原理,不然可能会引发更多BUG,用JQ也是这样,只懂得弄别人的东西,而不了解他实现的方法,不是真正理解的话,那用了也白用,出问题了不懂得改,有啥用
@sujiaya: jQuery,你可以直接看源码,看高手写的源码,相信对你的JS学习帮助更大。