使用Ajax技术获得服务端信息时的注意事项
我现在的做法是服务端使用Rsponse.Write()方法来输出信息.客户端再使用xmlhttp.responseText或xmlhttp.responseXML来接收信息,我发现接收的信息老是附带一些html的信息,后来研究发现原来在服务端增加一句代码就可以去掉那些附加的html信息,测试代码如下:
客户端:
<head runat="server">
<script language=javascript>
function getstr()
{
var xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","Default2.aspx",false);
xmlhttp.send();
alert(xmlhttp.responseText);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type=button id=bitOk value="测试" onclick="getstr()">
</form>
</body>
服务端:<script language=javascript>
function getstr()
{
var xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","Default2.aspx",false);
xmlhttp.send();
alert(xmlhttp.responseText);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<input type=button id=bitOk value="测试" onclick="getstr()">
</form>
</body>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Write("你好Ajax"); //如果像这样写的话就会在输出信息中增加一些html信息
}
}
附加了html信息的输出:{
if (!IsPostBack)
{
Response.Write("你好Ajax"); //如果像这样写的话就会在输出信息中增加一些html信息
}
}
如果在服务端代码中增加一行Response.End(),就会去掉这些讨厌的html信息,Response.End()的作用是"将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发EndRequest 事件",加了Response.End()后的输出结果如下:
另外一种方法:如果你这个页面中有很多函数都用到了Response.Write()来输出,你可以不必每个函数都写一句Response.End(),可以通过重载页面的Render方法来实现同样的效果:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Write("你好Ajax");
}
}
protected override void Render(HtmlTextWriter writer)
{
//base.Render(writer); 注意这一句要屏蔽掉
}
{
if (!IsPostBack)
{
Response.Write("你好Ajax");
}
}
protected override void Render(HtmlTextWriter writer)
{
//base.Render(writer); 注意这一句要屏蔽掉
}