当前位置:  开发笔记 > 编程语言 > 正文

跨站点XMLHttpRequest

如何解决《跨站点XMLHttpRequest》经验,为你挑选了1个好方法。

我想提供一个Javascript代码,它可以在任何包含它的网站上运行,但它总是需要在托管Javascript的服务器上获取更多数据(甚至修改数据).我知道出于明显的原因存在安全限制.

考虑在xyz.com上托管的index.html,其中包含以下内容:


some.js是否能够使用XMLHttpRequest将数据发布到abc.com?换句话说,abc.com是否被隐含信任,因为我们从那里加载了Javascript?



1> James..:

some.js是否能够使用XMLHttpRequest将数据发布到abc.com?换句话说,abc.com是否被隐含信任,因为我们从那里加载了Javascript?

不,因为脚本被加载到一个单独的域,它将无法访问...

如果您信任数据源,那么JSONP可能是更好的选择.JSONP涉及将新的SCRIPT元素动态添加到页面,并将SRC设置为另一个域,并将回调设置为查询字符串中的参数.例如:

function getJSON(URL,success){
    var ud = 'json'+(Math.random()*100).toString().replace(/\./g,'');
    window[ud]= function(o){
        success&&success(o);
    };
    document.getElementsByTagName('body')[0].appendChild((function(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = URL.replace('callback=?','callback='+ud);
        return s;
    })());
}

getJSON('http://YOUR-DOMAIN.com/script.php?dataName=john&dataAge=99&callback=?',function(data){
    var success = data.flag === 'successful';
    if(success) {
        alert('The POST to abc.com WORKED SUCCESSFULLY');
    }
});

因此,您需要托管自己的脚本,该脚本可以使用PHP/CURL发布到abc.com域,然后以JSONP格式输出响应:

我对PHP不太好,但可能是这样的:


因此,您可以控制的服务器将充当客户端和abc.com之间的媒介,您将以JSON格式将响应发送回客户端,以便JavaScript可以理解和使用它...

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有