在同一主机上对PHP文件使用XMLHTTP请求的Javascript违反了同源策略

Javascript Which Uses XMLHTTP Request To PHP File On Same Host Violates Same-Origin Policy?

本文关键字:Javascript 请求 策略 XMLHTTP 主机 PHP 文件      更新时间:2023-09-26

可能重复:
请解释JSONP
在第';www.foo.com';,可以从';www.example.com';将ajax请求发送到';www.example.com';?

我需要从javascript向php文件发出请求
php文件然后从数据库中提取数据,然后将信息发送回javascript

我认为最好的方法是制作一个javascript,它使用XMLHTTP向PHP脚本询问信息。Javascript文件和PHP文件都在同一台主机上。

问题是我在另一个域上调用javascript。这意味着由于同源策略,我无法将XMLHTTP.open设置到其他域。

即使从技术上讲javascript和php文件都在同一台主机上,我是不是运气不好?最好的办法是什么?我看到一些关于使用JSON的文章。

另一个问题是我不能使用jQuery。我知道如果我可以使用jQuery,事情会更容易,但我做不到。

这与我试图做的事情非常接近,但我的请求必须是跨域的:
http://www.w3schools.com/php/php_ajax_database.asp

有什么想法吗?我对其他解决方案持开放态度。谢谢

我认为你的调查重点应该是"领域混乱":

  • 对于客户端,这两个域是否在同一主机上并不重要:只有域才算数
  • 对于服务器端,这当然是不同的

您可能正在尝试在同一服务器上的两个应用程序之间创建某种互操作——这可以通过一些自代理或简单地创建一个互操作域并从中加载相关部分来实现。

  • 自代理:使用重写规则或代理设置http://domain2.tld/ajax.php映射到的内容http://domain1.tld/ajax-domain2.php
  • 互操作域:具有http://domain3.tld/domain1/映射到http://domain1.tld和http://domain3.tld/domain2映射到http://domain2.tld并从domain3.tld加载所有内容

我建议您使用JSONP(http://en.wikipedia.org/wiki/JSONP)如果HTTP GET就足够了。(您不需要向服务器发送二进制文件)。

这是一个非常简单的想法。首先创建一个回调来处理来自服务器的数据。

var callback = function(data) { alert('My name is ' + data.user) };

然后在DOM中添加脚本元素:

<script src='http://external-domain.com/api.php'></script>

它返回用回调函数包装的json结果

callback({ user : Aaren });