您將需要使用JSONP將數據包裝在回調中,並將其模仿爲text/javascript
以規避跨域策略。
What are some good examples of JQuery using JSONP talking to .net?
標題中提到的.NET,但服務器端環境是不相關的客戶端實現。
一個可行的方法是在你自己的域上設置一個服務器端腳本,它將使用CURL(或任何其他http lib)轉發請求,然後將響應輸出到腳本的XHR請求。此方法在客戶端腳本和您嘗試訪問的遠程域之間建立一個catchall,因爲curl或任何其他服務器端http lib不受跨域策略的約束。
編輯
我會因爲你說你需要發個帖子做一些更細節我的第二個方法。就像概念驗證一樣,我將使用PHP來詳細說明需要完成的任務,但將這個概念轉換爲另一種腳本語言應該很簡單。
假設我可以在您的域上製作一個catchall腳本www.yourdomain.com/data.php
該文件中的邏輯需要從http請求中讀取所有後續變量,將它們放入curl實例作爲對新域的請求,執行該請求,然後將請求的響應輸出到我的ajax XHR,這樣就好像從來沒有中介過。
我喜歡用jscol's OOCurl來使curl的語法稍微漂亮些。
<?
reqire_once('path/to/oocurl.php');
$c = new Curl('voip.otherdomain.com/api'); // instantiate with the url endpoint for the api
$c->post = True;
// Set the postfields for the child request to the same as the parent
$c->postfields = $_POST;
//Bust if there is an error and output that instead
$c->failoneerror = True;
$response = $c->exec();
if($c->errno()){
//there was an error, what was it?
header('Status:' . $c->info(CURLINFO_HTTP_CODE));
echo $c->error();
}else{
//success, echo output
header('Content-type: application/json');
echo $response;
}
?>
發送您的Ajax請求這類腳本會透明地把他們關在構造函數中捲曲指定的其他領域。請注意,我假設返回mimetype是json - 您可能需要調整以適應您的API。
如果您擁有api的身份驗證憑據,則需要手動將它們編碼爲請求作爲附加post vars,並使用hmac保護端點。這真的是特定於你如何做你的客戶端/服務器端交互,並有點超出重定向器的範圍......基本上只要確保你有一個服務器定義的哈希鹽,並有摘要發送您的發佈請求,以確保第三方不能簡單地發佈到您的中介結束。
編輯
如果有人從谷歌跌倒,我做了一個庫,我自己採取這種方法可用here.
'jsonp'可以去跨域。 –