同源策略——JavaScript调用PHP
我知道这是一个热门话题,但我还没有找到一个完全全面的答案 我正在尝试为我们的“客户”创建一种简单的方法,在他们的网站上放置一个谷歌地图,它在地图上标出我们客户(或其子集)的位置。客户在一个MySQL数据库中,该数据库通过PHP脚本动态转换为XML(根据Google的示例)。这在我的网站上运行良好,但当我在另一个网站上尝试时,xmlHTTPRequest不允许查看PHP,因为它在另一个域上 我可以通过在另一个域上编写另一个PHP文件来避免这种情况,该文件只读取原始域上的PHP文件。但并非所有客户的服务器上都会运行PHP。是否有任何方法可以使用JavaScript从数据库返回XML结果 有两点:同源策略——JavaScript调用PHP,php,javascript,xmlhttprequest,jsonp,same-origin-policy,Php,Javascript,Xmlhttprequest,Jsonp,Same Origin Policy,我知道这是一个热门话题,但我还没有找到一个完全全面的答案 我正在尝试为我们的“客户”创建一种简单的方法,在他们的网站上放置一个谷歌地图,它在地图上标出我们客户(或其子集)的位置。客户在一个MySQL数据库中,该数据库通过PHP脚本动态转换为XML(根据Google的示例)。这在我的网站上运行良好,但当我在另一个网站上尝试时,xmlHTTPRequest不允许查看PHP,因为它在另一个域上 我可以通过在另一个域上编写另一个PHP文件来避免这种情况,该文件只读取原始域上的PHP文件。但并非所有客户的
MatJavaScript是客户端,但数据库不是。JavaScript不能直接从MySQL数据库中提取。一种简单的方法是让PHP脚本返回如下内容:
callback_function(YOUR_DATA);
然后在客户端站点上包含的JS脚本中,动态插入一个指向PHP脚本的
,其中包含src
:
(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);
})();
此技术被调用,应该完全按照您的要求执行;)
解决此问题的另一种方法是在内容安全策略中允许跨域XMLHttpRequest。但是我认为现在只有Firefox4支持这个功能。你能用JSON代替XML吗?如果是这样的话,你的选择可能是你最好的选择。这种方法存在安全风险,只能用于已知和可信的源
更多阅读:#3被称为JSONP,这听起来像是您在这里需要的。是的,这就是实现它的方法。从您的域中嵌入脚本,如果需要,将变量作为参数传递给php。我想我要花一点时间才能弄清楚,但我[想我!]大体上明白了这个想法。谢谢nikic。好的,因为脚本是异步加载的,所以当我尝试访问json数据时会抛出错误。它什么时候可用/我如何等到它可用后再尝试访问它?另外,如果我使用“callback_fn({mydata})”,我会被告知没有定义“callback_fn”。您必须先定义回调函数,然后动态加载脚本;)太阳照在大理石的头上。是的,现在开始掌握它了!只花了一天时间。。。这是有用的:。PS:谢谢;再一次!