经过上一次的AJAX尝试,我想把AJAX实际应用于密码的修改界面,它要先输入工号,我就希望它跳出对应的姓名。
但问题随之而来,上一次,我是使用单独建立一个ASP文件,但这一次我不希望文件太多,少一些文件,这样看得更清爽一些。所以想把查询姓名的代码也放在更改密码的界面中。这里我遇到了两个问题:如何改为POST方式,因为POST方式可以让我不必写那么多参数;如何让ASPX只传回指定内容,而不是把<html><head>...全部传回来。
第一个问题,网络上有现成代码,原来代码如下:
function TxtS61BH_keydown()
{
var xhttp = new ActiveXObject("Microsoft.XMLHTTP");
xhttp.open("GET", "password.aspx?S61BH="+document.all["TxtS61BH"].value, false);
xhttp.send();
eval(xhttp.responseText);
}
现只要改为如下即可:
function TxtS61BH_keydown()
{
var para="S61BH="+document.all["TxtS61BH"].value;
var xhttp = new ActiveXObject("Microsoft.XMLHTTP");
xhttp.open("POST", "password.aspx", false);
xhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
xhttp.send(para);
eval(xhttp.responseText);
}
主要就是,增加一个变量para,然后send时,括号内加上para。现在看来,POST方式也是要写参数,没有实现我之前想象的内容。
我测试时发现即使xhttp.setRequestHeader不写,也可以实现POST的方式。
第二个问题,网络上说得比较少,大部分都是说“新建一个空白的页面……”这种方法,但有发现使用Response.End即可。而我试一下没有效果。折腾了半天,发现我在试上一部时,把xhttp.setRequestHeader注释了,如果有写上这句话,Response.End就OK了。气!
所以,要让ASPX回传一些内容,可以使用Response.End来截止“<HTML><HEAD>...”这些内容的回传。
另外,我再试GET的方式,也是需要xhttp.setRequestHeader的,否则也是传回“<HTML><HEAD>...”。