2013-11-27 41 views
0

我試圖使用json和php從一臺服務器到另一臺服務器的請求。Json請求到另一個域

我的html頁面:

$.ajax({ 
      type: "POST", 
      url: "https://api.domain.com/gateway/partners/create_account.ajax.php", 
      dataType: 'jsonp', 
      crossDomain: true, 
      data: { "name" : "Test name"}, 
      success: function(data) 
      { 
       console.log(data.responseText); 
      } 
      }); 

我的PHP是這樣的:

$name = $_GET['name']; 
$data = array("Hello", $name); 

echo json_encode($data); 

我希望收到我的控制檯上:你好測試名稱

我做了什麼錯?

+0

你會得到什麼錯誤? –

+0

你不能使用JSONP和POST請求: 請參閱:http://stackoverflow.com/questions/2699277/post-data-to-jsonp – Cyrus

回答

3

您的位置:

  1. 告訴jQuery來處理響應爲JSONP
  2. 編寫PHP將輸出JSON(不JSONP)......大概有text/html內容類型。
  3. 嘗試發出POST請求而不是GET請求。 JSONP僅支持GET。
  4. 嘗試將請求返回的數據視爲XHR對象。

一個JSONP響應的最小的例子是:

<?php 
header("Content-Type: application/javascript"); 
$name = $_GET['name']; 
$data = array("Hello", $name); 

echo $_GET['callback']; 
echo "("; 
echo json_encode($data); 
echo ");"; 

然後,你需要改變JS讓type: "POST"成爲type: "GET"console.log(data.responseText);成爲console.log(data);

或者,你可以使用another technique to bypass the same origin policy和仍然使用POST。

+0

thnx,這工作! –

0

jsonp是一種古老的做法,也是一種不安全的做法,因爲任何人都可以打電話給您的腳本。當jsonp調用失敗時,非常默認地檢索錯誤。

你可以在你的請求中實現CORS標題,然後你可以使用一個簡單的XHR調用。

Addeding頭:

Access-Control-Allow-Origin: * 

將解決您的問題,而是更好地運用確切的域,而不是通配符。