2011-11-14 114 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