日期:2014-05-16  浏览次数:20319 次

js使用ajax跨域没有权限的解决方法

在javascript中经常会使用ajax,但就是跨域这个问题搞得好多人都不知道怎么办,挺烦人,今天看到一个博客有一个解决方案,很不错,本人已测试真的可以。
由于安全性问题, ajax在进行请求数据时,不能跨域请求.?
比如 在 www.a.com 下的页面, 无法ajax请求www.b.com/ajax.php的内容.?
尽管这样的需求不多,但遇到了怎么办??
这里给出一个JS模拟ajax的方式实现跨域, 但仅仅局限于GET!
在 <script> 标签中, src的属性是可以设置非本域下的地址的. 借助此特点,即可模拟ajax的方式实现跨域.?
假设 www.a.com 域名下的程序 需要通过ajax方式提交数据到 www.b.com 下的login.php?username=*&passwod=*实现登陆判断.?
实现方式如下:?
在www.a.com内动态创建JS的方式来加载www.b.com的内容,代码如下?
JavaScript代码

//此代码在www.a.com下   
var head = document.getElementsByTagName("head")[0];       
var js = document.createElement("script");       
js.src = "http://www.b.com/login.php?username=*&passwod=*";       
js.onload = js.onreadystatechange = function()       
{       
    if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")       
    {   
         head.removeChild(js);   
         //JS加载完毕了. 类似于ajax请求完成.   
         //执行是否登陆成功的判断   
    }       
}       
head.appendChild(js);  

?
这只是一个简单的例子,需要b.com下的login.php做好配合,login.php通过GET取得传入值,并生成JS的登陆标记.
JS加载完成后,根据JS标记判断登陆的状态,提示登陆成功或失败.即可完成要求,代码兼容常见浏览器. :)
当然缺陷也很明显,只能支持GET的方式提交数据.
下一次我会在说说ajax跨域POST的方法.

?