在具有域http://domain1的host1中,我使用带结构的ajax:
代码在这里:
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的其他主机时,无法加载ajax
$(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);
}
});
});
});
我认为,从域名1调用url:'http://domain1/get_data.php'时会发生错误。有没有人知道,为什么会发生这种情况?
答案 0 :(得分:3)
AJAX调用必须符合same origin policy,不能对另一个域进行普通的AJAX调用。
但是,有workarounds:
为了使开发人员能够以受控的方式规避同源策略,使用片段标识符或
window.name
属性等许多“黑客”来在驻留的文档之间传递数据。不同的领域。使用HTML5标准,为此形式化了一个方法:postMessage
接口,该接口仅在最近的浏览器中可用。 JSONP和跨源资源共享也可用于启用与其他域类似的AJAX调用。[2]为了支持旧浏览器,JavaScript库easyXDM可用于为
postMessage
接口提供统一的API,以及用于允许跨域消息传递(XDM)的许多黑客。
答案 1 :(得分:1)
另一种方式 -
对another_file.php文件(位于同一域中)进行AJAX调用
;向其他域执行 CURL 请求并获得回复
这是一个简单的 CURL example
答案 2 :(得分:0)
所有AJAX调用必须符合相同的原始规则。此规则阻止AJAX调用另一个域。
事实:
在计算中,相同的原始政策是一个重要的安全概念 对于许多浏览器端编程语言,例如 JavaScript的。该策略允许在源自页面上运行的脚本 从同一个站点访问彼此的方法和属性 没有具体的限制,但阻止访问大多数方法和 不同网站上页面的属性。
这种机制对现代网络具有特殊意义 广泛依赖HTTP cookie维护的应用程序 经过身份验证的用户会话,因为服务器基于HTTP cookie 显示敏感信息或改变状态的信息 动作。严格区分不相关的内容 必须在客户端维护站点以防止数据丢失 机密性或完整性。
历史:
同源策略的概念可以追溯到Netscape Navigator 2.0。原始设计的近似衍生产品在所有当前浏览器中使用,并且经常扩展以定义大致兼容的安全性 其他Web脚本语言的边界,例如Adobe Flash或 对于直接DOM操作以外的机制,例如 XMLHttpRequest的。
有关详细信息,请参阅this Wikipedia page。
另一种方法是使用AJAX调用PHP文件(在您的域上)。然后执行cURL调用。有关详细信息,请参阅PHP.net。并here's a simple example