2011-01-29 1 views
1

としてJSONObjectを渡すと、Datasnapでサーバーの消費私は、DataSnapサーバーを持っている方法は名前の持っている:以下PHPはパラメータ

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リクエスト が失敗しました! CでHTTP/1.1 500内部サーバー エラー: ラインまあ19

の\ xamppの\ htdocsに\ JSON-PHPの\のindex.phpを、私はこれだけのPHPコードで正常に動作し、他の方法を持っていますが、私はparametrer プリミティブ型として渡す場合:文字列、整数...

を私はデバッグを行なったし、私はオブジェクトunMarshalll)にパラメータJSONObjectを変換する必要があるという問題は、現時点で起こる参照してください。クライアントDelphi Win32でこのメソッドを呼び出すと、うまく動作します。

誰かがこの問題について何か知っていますか?

ありがとうございます!

答えて

1

あなたのPHPコードは、データスナップサーバーに対してGETリクエストを発行します。 JSONObjectのような複雑なパラメータの場合、適切なJSONObjectを持つPOSTまたはPUT HTTP動詞をメッセージ本文として使用する必要があります。

したがって、POSTリクエストをdatasnapサーバーに送信する必要があります。詳細については、文書をチェックしてください。 http://docwiki.embarcadero.com/RADStudio/en/DataSnap_REST_Messaging_Protocol

+0

こんにちはダニエルテティ返信用 まず、感謝! ウェブプログラミングについて知りません。 私は、クライアントのWebとデスクトップで動作するためにミニフレームワークを行いました。デスクトップはすべて正常に動作します...私は別のクライアント(RAD PHPではなく)でいくつかのテストをするだけです。私のサンプルコードを完成させるのに役立つでしょうか? ありがとうございました –

+0

私は自分の仕事用PCにいないので、テストすることはできませんが、コードは次のようになります:http://stackoverflow.com/questions/3084834/how-to-issue-http -post-request できるだけ早くここに投稿し、ブログ(www.danieleteti.it)に投稿します –

+0

Ok Daniele、もう一度ありがとう!私はここでいくつかのコードを試してみましょう! ここに投稿するか、あなたのブローカーに –

1

のDataSnapで動作このPHPコード - デルファイ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);