2011-11-14 113 views
0

与域http://domain1 host1的域Ajax时我使用AJAX与结构:错误使用来自其他

  1. 的index.php(即包括AJAX)
  2. config.php中(连接数据库)
  3. 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。有没有人有想法,为什么会发生这种情况?

+0

可能重复[jQuery ajax跨域](http://stackoverflow.com/questions/3506208/jquery-ajax-crossdomain) – Tadeck

回答

3

AJAX调用必须符合same origin policy,您不能对其他域进行纯AJAX调用。

有,但是,workarounds

为了使开发人员能够,以受控的方式,绕过同源策略,一些“黑客”如使用片段标识符,或window.name属性已被用于在位于不同域中的文档之间传递数据。通过HTML5标准,一种方法正式化了:postMessage接口,该接口仅在最近的浏览器上可用。 JSONP和跨源资源共享也可用于启用对其他域的类似AJAX的调用。[2]

为支持以前的浏览器,JavaScript库easyXDM可用于为postMessage接口提供统一的API以及用于允许跨域消息传递(XDM)的许多黑客手段。

+0

谢谢你,你有一个好主意,希望我会做到这一点 –

1

另一个way-

  1. 做一个AJAX调用another_file.php文件(它是在相同的网域)

  2. 从another_file.php;做一个CURL请求到其他领域,并得到响应

下面是一个简单CURL example

0

所有的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