2015-06-04 82 views
0

我的本地安裝的XAMPP上有一個文件,名爲TEST.PHP。當我去http://127.0.0.1/TEST.PHP並執行它,腳本應該張貼值ID和NAME到現場http://otherdomain.com/post.php和輸出放到DATA。這不起作用,因爲同源策略。當我跟蹤包時,我收到一個錯誤calles 「NS_ERROR_DOM_BAD_URI」。我現在的問題是,無論如何,無論如何可以不必訪問http://otherdomain.com/解決同源策略問題?

test.php的

<script> 
    $(window).load(function(){ 
      var url = "http://otherdomain.com/post.php"; 

      $.post(url,{id : "12", name : "John"}, function(data) 
      { 
       alert("It worked!"); 
      }); 
    }); 
    </script> 

UPDATE

我現在改成了以下設置。我有兩個名爲SEND.PHP和PROXY.PHP的文件。我從SEND.PHP向PROXY.PHP發送請求,PROXY.PHP將實際請求發送給OTHERDOMAIN.COM。當我現在執行SEND.PHP(意味着我按下按鈕)時,我總是得到結果「Error:403 Forbidden Access」。

SEND.PHP

<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $("button").click(function(){ 
     $.post("proxy.php", function(data,status){ 
      alert("Data: " + data + "\nStatus: " + status); 
     }); 
    }); 
}); 
</script> 
</head> 
<body> 

<button>Send Data</button> 

</body> 
</html> 

PROXY.PHP

<?php 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL,"http://otherdomain.com/data"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,"name=Jack&age=23"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$server_output = curl_exec ($ch); 

curl_close ($ch); 

if ($server_output == "OK") { echo "It Worked!"; } else { echo "Error: " . $server_output; } 

?> 
+0

具有相同原產地政策的重點是防止人們做這樣的事情。 –

+0

看看這個:http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy?rq=1 –

+0

你需要做的'otherdomain'的東西在PHP中,而不是JavaScript的。 – Lance

回答

0

沒有,沒有工作圍繞JavaScript中的同源策略。這是一項安全功能。但是,如果您有權訪問其他域,則可以使用PHP中的CURL來完成類似的操作。

2

您必須使用代理文件以避免相同的原產地策略限制。 在proxy.php中,您可以通過CURL或其他HTTP庫向otherdomain.com發送請求。通過JavaScript調用代理文件,而不是直接調用otherdomain.com。

+0

它不應該有任何區別,如果我將值從mydomain.com傳遞給otherdomain.com或從proxydomain.com傳遞給otherdomain.com,對不對?我不明白爲什麼這應該工作,因爲起源仍然不一樣。謝謝! – user3877230

+0

@ user3877230 - 只有瀏覽器存在相同的源策略,但PHP文件正在服務器上運行。你的JavaScript可以訪問PHP,因爲它來自同一臺服務器(即:你的服務器)。 –

+0

非常感謝您的提示和解釋,我會嘗試一下! – user3877230