0

初めての Web サービスを書いていますが、JSON データの受け渡しに関連する問題があります。私の Web サービスは 2 つのファイルに分割されています。サービス ハンドラを含むcontroller.phpと、要求に応じて提供されるクラスとメソッドを含むservice.phpです。

これは、controller.php からの取得フラグメントです。

    public function atender() {
        // pre-procesamos la petición
        if (!empty($_POST)) {
            if (!empty($_POST["class"]) && !empty($_POST["action"]) && !empty($_POST["function"])) {
                $clase = ucwords($_POST["class"]);
                $metodo = "{$_POST["action"]}{$this->obtenerMetodo($_POST["function"])}";
                $id = (!empty($_POST["datos"]) ? stripslashes($_POST["datos"]) : null);

GET モードと POST モードの両方でリクエストに対応できます (認証を必要としないメソッド ( getCategoriesgetCategoryByIdgetProductsgetProductByIdなど) には GET を使用します。これらは、寿司レストランで料理のカテゴリと料理を取得するメソッドです)。

どの GET リクエストでも、すべてが期待どおりに機能します。私の問題は、POST リクエストを処理するときに発生します。すべての URL パラメーターを JSON で取得する必要があります。これは iOS アプリを提供するためであり、JSON はデータとの間でデータを処理する方法です。

これは、service.phpの処理フラグメントです。

    public function putUser($datos) {
        if (!empty($datos)) {
            $usuario = json_decode($datos);
            $this->log .= implode("/", $usuario) . "\r\n";

この場合、$datosはリクエストからの JSON エンコード データです。controller.php (上記のコード) で$idとして受け取ります。これは私の最初の Web サービスなので、ここで何か本当に悪いことをしている可能性が非常に高いですが、少し盲目です。

サービス処理コードのさまざまなバリエーションを試しました。json_decode($datos, true) を使用しても機能しません。私は得る

応答としての「予期しないトークン <」と、生の形式 (Google Chrome の高度な REST クライアントを使用) で次のように表示されます<a href='function.implode'>function.implode</a>: /service.php 344 行目 '。

SOAP は、通常、このようなカスタム コードを記述するよりも優れた代替手段であることはわかっていますが、今のところ、このコードに固執し、次のプロジェクトでより優れた代替手段を実装する必要があります。私が間違っていることを教えていただけますか?

4

1 に答える 1

1

エラーメッセージは、基本的に、それが有効なJSONではないことを示しています-そして、そのようなエラーメッセージは通常正しいです。

あなたのエラーは、送信/受信コードのどこかにあります。おそらく、ある形式で JSON を送信し、別の方法でアクセスしようとするでしょう。電話から送信されたリクエストを見る方法がないので、次のように推測します。

  • データを application/json として送信し、URL エンコード形式として受信しようとします。違いがわからない場合は、ここに問題があります。
  • JSON データにストリップスラッシュを使用していますが、これは間違っています。Magic_quotes がオンになっていない限り、これも間違っています (つまり、magic_quotes と stripslashes の両方を使用する必要があります)。
于 2013-03-15T10:58:45.633 に答える