今天看到一篇介绍AJAX原理的文章(http://www.dotnetbips.com/bdb52d60-1100-43b0-9b80-b765937201e8.aspx?articleid=306 ),主要是举了一个例子来说明。看了一下也就是关于XMLHTTP的应用,于是自己照着CODE一下。很快写完,于是测试,看看效果,本来以为可以马上顺利的看到效果,在下拉框里随便选了两项,一切ok,要取得的数据也正常能正常显示出来,但是在选另一下项的时候报错了。说是,webform1.aspx的脚本里头var orders=dstRoot.getElementsByTagName("OrderID"); 'null'为空或不是对象
赶快检查一下又没有把代码敲错(不可能照着敲也出错呀!)果然,没有敲错!代码逻辑上也是完全没有问题的,为什么会报这么一个错?!
最后几经周折,比较,发现在Northwind这个数据库Orders表中,有的记录中有这样的内容México D.F. 注意到这个é了么!就是这个字符的原因导致报错,也不知道是哪国字符,索性把é改成e,终于天下太平了!
下面附上代码,要是遇到这方面应用的时候,这些代码还是比较有用的!
Webform1.aspx的<HEAD>中:
<script language="javascript">
var obj;
function GetDataViaAJAX()
{
try
{
obj=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e1)
{
try
{
obj=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e2)
{
obj=null;
}
}
if(obj!=null)
{
obj.onreadystatechange=ProcessResponse;
obj.open("Get","./WebForm2.aspx?customerid="+document.getElementById("Dropdownlist1").value,true);
obj.send(null);
}
return false;
}
function ProcessResponse()
{
if(obj.readyState==4)
{
if(obj.status==200)
{
var dstRoot=obj.responseXML.documentElement;
var ddlOrders=document.getElementById("ListBox1");
for(var i=ddlOrders.length-1;i>-1;i--)
{
ddlOrders.options[i]=null;
}
var orders=dstRoot.getElementsByTagName("OrderID");
var text;
var listItem;
for(var i=0;i<orders.length;i++)
{
text=(orders[i].textContent||orders[i].innerText||orders[i].text);
listItem=new Option(text,text);
ddlOrders.options[i]=listItem;
}
}
else
{
alert(obj.status);
alert("Error Retriving Data!");
}