2012-11-07 52 views
2

我從JQuery $ .getJSON函數調用webservice,它工作正常。如何使用參數和回調從PHP調用JSON Web服務?

var p = { 
     'field1': 'value1', 
     'field2': 'value2', 
     'field3': 'value3' 
    }; 

    $.getJSON('https://service:[email protected]/service/search?callback=?', p, function(data) { 
    if (data[0]) {  
     // print results 
    } else { 
     // no results found 
    } 
}); 

我想從PHP和CURL連接,但它不工作,它總是返回false。

//首先嚐試

$params = array( 'field1' => 'value1', 'field2' => 'value2', 'field3'=> 'value3'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_URL, 'https://service:[email protected]/service/search?callback=?'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 
$result = curl_exec($ch); // return false instead of my JSON 

//第二次嘗試

$data_string = json_encode($params);                     
    $ch = curl_init('https://https://service:[email protected]/service/search?callback=?');                  
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);                             

    $result2 = curl_exec($ch); //return false instead of my JSON 

我做錯了嗎?

非常感謝,

+0

是請求jsonp或json?返回的格式在兩種情況下都不相同 – Landon

+0

.getJSON是一個獲取請求。在PHP中,您正在使用一個post請求。在POSTFIELDS中也需要一個關聯數組,但在第二次嘗試中,只給它一個字符串。 – Codeguy007

回答

0

jquery請求正在使用GET。你寫的捲曲代碼似乎是發送一個post請求(我不是捲曲專家)。顯然,接收服務器以不同方式處理不同類型的請求,因此請確保您通過curl發送get,這應該有所幫助。

0

試着改變你的代碼如下:

$params = array( 'field1' => 'value1', 'field2' => 'value2', 'field3'=> 'value3'); 

$data_string = implode('&',$params); 
//NB: you may need to urlencode the each of your params 

$ch = curl_init('https://https://service:[email protected]/service/search? callback=?&' .$data_string);                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$result2 = curl_exec($ch); 

未經測試的代碼,希望它幫助。

0

getJSON發送GET請求,所以您需要將params數組轉換爲帶有http_build_query的字符串並將其附加到查詢中。當你用HTTPS請求數據時,你需要將CURL指向CURLOPT_CAINFO/CURLOPT_CAPATH的有效證明,我會忽略代碼中的驗證。

$params = array( 'field1' => 'value1', 'field2' => 'value2', 'field3'=> 'value3'); 
$url = 'https://service:[email protected]/service/search?callback=?' . http_build_query($params); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch , CURLOPT_SSL_VERIFYPEER , false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = curl_exec($ch); 
if($result === FALSE) { 
    echo curl_error($ch); 
}