2011-01-29 24 views
1

DataSnap服務器。我有一個DataSnap服務器和一個有一個方法命名爲:消費用PHP傳遞的JSONObject作爲參數

function TServerMethodsMain.AddCity(ACity : TJSONObject) : Boolean ; 

我做了下面的小PHP代碼來調用這個方法。

<?php 

class city 
{ 
    public $id; 
    public $description; 
    public $uf;   
} 

$objcity = new city ; 

$objcity -> id   = 1   ; 
$objcity -> description = 'MY CITY' ; 
$objcity -> uf   = 'XX'  ; 

$url = 'http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/' ; 
$url .= json_encode($objcity) ; 

$page = file($url) ; 

$show = json_decode($page[0]); 

echo '<pre>'; 

print_r ($show); 

echo '</pre>'; 

?> 

我從瀏覽器(Firefox或IE)此錯誤消息:

警告: 文件(http://192.168.1.101:8088/datasnap/rest/TServerMethodsMain/AddCity/ { 「id」:1,「description」:「MY CITY」,「uf」:「XX」})[function.file]: 無法打開流:HTTP請求 失敗! HTTP/1.1 500內部服務器錯誤 在 C:上 線19

好\ XAMPP \ htdocs中\ JSON-PHP \的index.php,我也有其它的方法與此PHP代碼工作正常,但只如果我通過爲parametrer 基本類型:字符串,整數...

我做了調試,並看到問題發生在此刻,我需要參數的JSONObject轉換成對象unMarshalll)。當我通過Client Delphi Win32調用此方法時,它工作正常!

有沒有人知道這個問題?

謝謝!

回答

1

您的PHP代碼向datasnap服務器發出GET請求。對於像JSONObject這樣的複雜參數,您需要使用POST或PUT HTTP動詞以及適當的JSONObject作爲消息主體。

所以,你需要發送POST請求到datasnap服務器。查看文件以獲取更多詳細信息。 http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol

+0

喜丹尼爾特提 首先,感謝回答! 那麼,我不知道網絡編程..我 我做了一個迷你framewrok與客戶端Web和桌面操作。與桌面所有正常工作...我只需要做一些測試與另一個客戶端(不是RAD PHP)。可以幫我完成我的示例代碼? 非常感謝你 – 2011-01-31 12:52:30

1

PHP代碼作品與的DataSnap - 德爾福XE2

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json", "Content-Type: text/xml; charset=utf-8")); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, 'user:pass'); 
curl_setopt($ch, CURLOPT_URL, $param_url); 
$response = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch);