Sep
16
今天花了点时间拾起Ajax的教程再看,终于搞定了非IE浏览器的处理
更重要的是发现了这一点:
这就是我刚开始时遇到如下错误的原因了:
下面给出我的一段测试代码(带注释):
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
更重要的是发现了这一点:
引用
Ajax 采用一种沙箱安全模型。因此,Ajax 代码(具体来说就是 XMLHttpRequest 对象)
只能对所在的同一个域发送请求。如果让 Ajax 代码在 www.abc.com 上运行,则必须是
www.abc.com 中运行的脚本才能发送请求。
只能对所在的同一个域发送请求。如果让 Ajax 代码在 www.abc.com 上运行,则必须是
www.abc.com 中运行的脚本才能发送请求。
这就是我刚开始时遇到如下错误的原因了:
引用
[Exception... "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)" location: "http://localhost/ajax/1.html Line: 36"]
下面给出我的一段测试代码(带注释):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Ajax Test</title>
</head>
<body>
<div id="content"></div><!-- 此div用于显示ajax代码取回的数据 -->
<script language="javascript">
//为了兼容新老版本IE和非IE浏览器,写此函数用于创建一个XMLHTTP对象
function GetXMLHTTP()
{
var xmlHttp=null;
try{
try{ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch(e1){ xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");}
}catch(e2){ xmlHttp=new XMLHttpRequest;}
return xmlHttp;
}
//此函数将和XMLHTTP对象的onreadystatechange事件绑定
function stateChange(){
var div1 = document.getElementById("content");
if(xml.readyState == 4){ //表示完成数据传送
if(xml.status == 200){ //HTTP状态200表示成功
div1.innerHTML = xml.responseText;
}else{
alert(xml.status);
}
}else{
div1.innerHTML = "Waiting...";
}
}
// 取得当前页面域名(AJAX沙箱安全模型要求XMLHTTP只对当前域名有效)
// 组合出目的URL,用于XMLHTTP的open方法
// p.s. 由于 Ajax 代码是沙箱型的,因而只能连接到同一个域,实际上 URL 中不需要域名。
// 也就是说 var url = "/1.txt"; 就OK了。
var url = "http://" + window.location.host + "/1.txt";
var xml = GetXMLHTTP(); //创建对象
try{
xml.onreadystatechange = stateChange; //绑定事件
xml.open("GET", url, true); //get方式异步请求url
xml.send(null); //发送请求
}catch(e){ alert(e); } //请求出错处理
</script>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Ajax Test</title>
</head>
<body>
<div id="content"></div><!-- 此div用于显示ajax代码取回的数据 -->
<script language="javascript">
//为了兼容新老版本IE和非IE浏览器,写此函数用于创建一个XMLHTTP对象
function GetXMLHTTP()
{
var xmlHttp=null;
try{
try{ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch(e1){ xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");}
}catch(e2){ xmlHttp=new XMLHttpRequest;}
return xmlHttp;
}
//此函数将和XMLHTTP对象的onreadystatechange事件绑定
function stateChange(){
var div1 = document.getElementById("content");
if(xml.readyState == 4){ //表示完成数据传送
if(xml.status == 200){ //HTTP状态200表示成功
div1.innerHTML = xml.responseText;
}else{
alert(xml.status);
}
}else{
div1.innerHTML = "Waiting...";
}
}
// 取得当前页面域名(AJAX沙箱安全模型要求XMLHTTP只对当前域名有效)
// 组合出目的URL,用于XMLHTTP的open方法
// p.s. 由于 Ajax 代码是沙箱型的,因而只能连接到同一个域,实际上 URL 中不需要域名。
// 也就是说 var url = "/1.txt"; 就OK了。
var url = "http://" + window.location.host + "/1.txt";
var xml = GetXMLHTTP(); //创建对象
try{
xml.onreadystatechange = stateChange; //绑定事件
xml.open("GET", url, true); //get方式异步请求url
xml.send(null); //发送请求
}catch(e){ alert(e); } //请求出错处理
</script>
</body>
</html>
欢迎扫码关注:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
我的相同问题解决了~