hi 各位大哥们,
小弟初学网络编程很多问题都不明白,最近用javascript写了一个XMLHttpRequest代码,但是有问题,先放代码吧:
var XMLHttp;
XMLHttp=new XMLHttpRequest();
function send(){
XMLHttp.onreadystatechange=doHttpReadyStateChange;
XMLHttp.open("GET","http://www.baidu.com",true);
XMLHttp.send();
}
function doHttpReadyStateChange(){
if(XMLHttp.readyState==4){
alert(XMLHttp.responseText);
}
}
send(); 我想问各位大哥,为什么我的代码alert()效果是什么文字都没有,按照XMLHttp.responseText说的,我应该得到百度首页的文字吧,请问是我什么地方弄错了?因为我看书上是链接的本地文件可以返回文字,我链接百度服务器不能返回吗??是不是我有什么概念弄错了? 我若使用XMLHttp.responseXML返回确实"null",真的不明白为什么,请各位大哥帮帮忙,谢谢
小弟初学网络编程很多问题都不明白,最近用javascript写了一个XMLHttpRequest代码,但是有问题,先放代码吧:
var XMLHttp;
XMLHttp=new XMLHttpRequest();
function send(){
XMLHttp.onreadystatechange=doHttpReadyStateChange;
XMLHttp.open("GET","http://www.baidu.com",true);
XMLHttp.send();
}
function doHttpReadyStateChange(){
if(XMLHttp.readyState==4){
alert(XMLHttp.responseText);
}
}
send(); 我想问各位大哥,为什么我的代码alert()效果是什么文字都没有,按照XMLHttp.responseText说的,我应该得到百度首页的文字吧,请问是我什么地方弄错了?因为我看书上是链接的本地文件可以返回文字,我链接百度服务器不能返回吗??是不是我有什么概念弄错了? 我若使用XMLHttp.responseXML返回确实"null",真的不明白为什么,请各位大哥帮帮忙,谢谢
{
var xhr = null;
var msProgs = ["Microsoft.XMLHTTP", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP"];
for (var i = 0, l = msProgs.length; i < l; i++)
{
try
{
xhr = new ActiveXObject(msProgs[i]);
break;
}
catch (e){}
}
if (!xhr)
{
try
{
xhr = new XMLHttpRequest();
}
catch (e){}
}
if (!xhr)
{
return null; // null
}
return xhr; // XMLHttpRequest
}
var xmlHttp;
function sendHTTP()
{
if(window.ActiveXObject) //IE浏览器时
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
if(window.XMLHttpRequest) //其他浏览器时
xmlHttp=new XMLHttpRequest();
xmlHttp.onreadystatechange=getHTTP; //事件名不能写成onReadyStateChange,否则在火狐下不正常。
xmlHttp.open("get","http://www.baidu.com",true);
xmlHttp.send(null);
}
function getHTTP()
{
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
//document.getElementById("myText").innerHTML=xmlHttp.responseText;
alert(xmlHttp.responseText);
}
假设你的页面是http://www.example.org/index.html
那么这个页面“属于域www.example.org”你在这个页面里面写了一段JS,用xhr访问“http://www.baidu.com/”
被请求的页面“属于域www.baidu.com”,
与你自己的页面不属同一个域,于是就是“跨域请求”了。由于不同的域通常是由不同的机构控制,
跨域发送请求可能导致把一个域上的用户个人数据传给另一个域,
另一个域则可能滥用这些数据。(当然还有其它类型的安全问题)因此浏览器通常都禁止代码跨域发送请求,这个时候
responseText当然得不到请求的内容了。
具体视你使用的技术而定,PHP J2EE .NET的代码网上都很容易找到。
你只创建了ff request 没有ie request 你只能在 ff 上 用ie 不行
ff 不能跨域
跨域不能访问,但是比如我若访问百度,我的域和百度域不是一个吧,为什么我能用到它的js了??我这个地方始终不明白,我不知道我的表述是否正确。意思是:不是同一个域不能访问,但是为什么客户能访问到那么多网站和他的js程序了???这不是跨域吗?
谢谢
这句是不够的。XMLHttpRequest对象在ie和其他浏览器中创建的方法是不同的:ie中是通过ActiveX控件的途径创建的,而其他浏览器大多本身内置了这个对象,即用XMLHttp=new XMLHttpRequest()创建。也就是说XMLHttp=new XMLHttpRequest()在ie中无效,没有创建XMLHttpRequest对象,所以返回是空的。关于“跨域不能访问”,意思是www.baidu.com同你的程序运行时客户端所在的ip地址不同,这种情况下浏览器限制了javascript的一部分功能(不是所有功能)。
通过XMLHttpRequest有跨域限制,
但通过<script>引用外部的JS,被认为和引用图片、CSS类似,浏览器没有作限制,
因为通常认为这些是正常的资源调用。
(实际上这开了一个后门,
你在网上搜索JSONP就可发现<script>标签是可以利用来跨域传送数据的一种途径)
里面也封装了相应的方法,你可以研究下
基于Ajax原理的多选控件:
http://www.yideal.com/index.php?option=com_content&view=article&id=70:ajax-multiple-select&catid=36:script-instance-articles&Itemid=62