错误使用来自其他
与域http://domain1 host1的域Ajax时我使用AJAX与结构:错误使用来自其他
- 的index.php(即包括AJAX)
- config.php中(连接数据库)
- get_city.php
代码在这里:
index.php
$(document).ready(function(){
$('.nation').change(function(){
var id = $(this).val();
var dataString = 'id='+id;
$.ajax({
type: 'POST',
url: '**http://domain1/get_data.php**',
data: dataString,
cache: false,
success: function(html) {
$('.city').html(html);
}
});
});
});
在get_city.php:
<?php
include 'config.php';
$id = $_POST['id'];
if($id) {
$query = mysql_query("Select * From jos_city Where nation_id = id");
while($row = mysql_fetch_array($query)) {
$id = $row['id'];
$name = $row['city_name'];
echo '<option value="'.$id.'">'.$name.'</option>';
}
}
当我使用其他主机与域名http://domain2,那么阿贾克斯无法加载
$(document).ready(function(){
$('.nation').change(function(){
var id = $(this).val();
var dataString = 'id='+id;
$.ajax({
type: 'POST',
url: '**http://domain1/get_data.php**',
data: dataString,
cache: false,
success: function(html) {
$('.city').html(html);
}
});
});
});
我认为,在调用URL时出现错误: 'http://domain1/get_data.php'从domain1到domain2。有没有人有想法,为什么会发生这种情况?
AJAX调用必须符合same origin policy,您不能对其他域进行纯AJAX调用。
有,但是,workarounds:
为了使开发人员能够,以受控的方式,绕过同源策略,一些“黑客”如使用片段标识符,或
window.name
属性已被用于在位于不同域中的文档之间传递数据。通过HTML5标准,一种方法正式化了:postMessage
接口,该接口仅在最近的浏览器上可用。 JSONP和跨源资源共享也可用于启用对其他域的类似AJAX的调用。[2]为支持以前的浏览器,JavaScript库easyXDM可用于为
postMessage
接口提供统一的API以及用于允许跨域消息传递(XDM)的许多黑客手段。
谢谢你,你有一个好主意,希望我会做到这一点 –
另一个way-
做一个AJAX调用another_file.php文件(它是在相同的网域)
从another_file.php;做一个CURL请求到其他领域,并得到响应
下面是一个简单CURL example
所有的AJAX调用都必须遵守同样的产地来源规则。该规则阻止AJAX从调用到另一个域。
事实:
在计算中,同源策略是许多浏览器端的编程语言的一个重要的安全理念 ,如 的JavaScript。该策略允许脚本在来自同一站点的来自 的页面上运行,以访问彼此的方法和属性,但不会受到特定的限制,但会阻止访问不同站点上各个页面上的大多数方法和 属性。
该机制承担的是大量依赖于HTTP cookie来维护 身份验证的用户会话现代Web 应用的特殊意义,因为服务器行为基于HTTP cookie的 信息泄露敏感信息或采取状态更改 行动。客户端必须严格分离不相关的 网站提供的内容,以防止数据丢失或机密性或完整性。
历史:
同源策略的概念可以追溯到Netscape Navigator中 2.0。原始设计的近似派生用于所有当前浏览器,并且通常扩展为定义其他Web脚本语言(如Adobe Flash)的大致兼容的安全边界,或者用于除直接DOM操作以外的其他机制(例如 XMLHttpRequest)的边界。
查看this Wikipedia page了解更多信息。
另一种方法是使用AJAX调用PHP文件(在您的域上)。然后执行一个cURL调用。有关更多信息,请参阅PHP.net。和here's a simple example
可能重复[jQuery ajax跨域](http://stackoverflow.com/questions/3506208/jquery-ajax-crossdomain) – Tadeck