同源策略 – JavaScript调用PHP
作者:互联网
我知道这是一个热门话题,但我还没有找到一个完全全面的答案.
我正在尝试为我们的“客户”创建一种简单的方法,在他们的网站上放置Google地图,在地图上绘制客户(或其子集)的位置.客户在MySQL数据库中,通过PHP脚本(根据Google的示例)即时转换为XML.这在我的网站上工作正常,但是当我在另一个网站上尝试时,xmlHTTPRequest不允许查看PHP,因为它在另一个域上.
我可以通过在另一个域上编写另一个PHP文件来解决这个问题,该文件只是读取原始域上的PHP文件.但并非所有客户都会在其服务器上运行PHP.有什么方法可以使用JavaScript从我们的数据库返回XML结果吗?
几点:
>使xmlHTTPRequest的JavaScript仍然位于我们的服务器上 – 我们的客户端从脚本标记链接到它.我认为这可能已经足够了,但“起源”(根据Chrome,无论如何)仍被视为域#2
>这很棒:如果我在xmlHTTPRequest中使用绝对引用(例如request.open(‘GET’,’http://mydomain.com/api/foo.php’,true))那么它将在IE中失败,但如果我使用相对引用(‘/api/foo.php’),它将起作用.
>我对此不太了解,但我可以使用JSON吗?我见过:
‘script src =“http://…./someData.js?callback = some_func”’
但不知道如何,我会让’someData.js’看起来像JSON? (我在功能方面非常考虑,这可能是不正确的?).
>我尝试过添加:
header(“Access-Control-Allow-Origin:*”);
到输出XML的PHP的顶部,但它并没有真正做到我能说的多少!
>如果我在客户端的服务器上使用PHP包装器,那么使用cURL请求的优势是什么,而不是简单的file_get_contents或fopen?
对不起,很多问题,但任何指导将不胜感激.
非常感谢,
垫
解决方法:
一个简单的方法是让你的PHP脚本返回如下内容:
callback_function(YOUR_DATA);
然后在客户端站点上包含的JS脚本中,动态插入< script>其中src指向您的PHP脚本:
(function() {
var scriptElement = document.createElement('script');
scriptElement.type = 'text/javascript';
scriptElement.async = true;
scriptElement.src = 'http://example.org/yourScript.php?data=...';
var container = document.getElementsByTagName('script')[0];
container.parentNode.insertBefore(scriptElement, container);
})();
这种技术称为JSONP,应该完全符合你的要求;)
解决该问题的另一种方法是在内容安全策略中允许跨域XMLHttpRequest.但我认为现在只有Firefox 4支持它.
标签:php,javascript,jsonp,same-origin-policy,xmlhttprequest 来源: https://codeday.me/bug/20190526/1157773.html