各位高手朋友,我想利用JavaScript调用天气预报的Service,遇到一下几个问题:
1、下面的代码在IE中浏览是正常的,但到火狐或者谷歌浏览器上就不行;
2、经过在火狐和谷歌上调试,发现xmlhttp.status总为0;
3、把第二点情况考虑后,又发现在谷歌或者火狐上xmlhttp.responseXML总为null。
真心盼望朋友们给予解答,在这里先谢谢了。
<script language="javascript" type="text/javascript">
var xmlhttp=null;
window.onload = getChongqing;
function getChongqing(){
//判断浏览器类型,为了兼容!
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
xmlhttp.open("GET","http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=57516",true);
xmlhttp.onreadystatechange=stateChange;
xmlhttp.send(null);
}
function stateChange()
{
if(xmlhttp.readyState==4)
{
if(xmlhttp.status==0 || xmlhttp.status==200)
{
//获取所有返回的数据
var data = xmlhttp.responseXML;
//在火狐或谷歌浏览器中,无法调用getElementById,但IE中却正常。。
document.getElementById("no1").firstChild.nodeValue = data.getElementsByTagName("string")[5].firstChild.nodeValue;
document.getElementById("no2").firstChild.nodeValue = data.getElementsByTagName("string")[6].firstChild.nodeValue;
document.getElementById("tianqi_img1").src = "weather" + "/" + data.getElementsByTagName("string")[8].firstChild.nodeValue;
document.getElementById("tianqi_img2").src = "weather" + "/" + data.getElementsByTagName("string")[9].firstChild.nodeValue;
}
}
}
</script>
2.火狐和谷歌浏览返回xmlhttp.status=0,也就是服务器没有接受你的请求,直接拒绝了,IE接受请求,并返回成功状态200。
3.因为原因2,所以你根本就获取不到任何数据,IE除外。
问题在于在火狐和谷歌浏览器中,拒绝处理Ajax的跨域问题,你调用的那个Webservice和你的网站不是同一个域名。
用Jquery和一个Jquery插件可以解决这个问题。看这个帖子,net_lover的回答就可以得到答案。
http://topic.csdn.net/u/20110203/16/9EFF6CB5-92CC-4154-B91B-7B1A1F343CE3.html
另外:getElementById应该每个浏览器都是可以用的吧。
建议使用jquery,就不用考虑很多浏览器兼容方面的问题了。