0

こんにちは、Android アプリ用の Cakephp で Web サービスを作成しています。リクエストを受け取り、レスポーズを送信していますが、クライアント側にレスポンスが表示されません。私のコードは以下のとおりです。応答を送信する他の方法がありますか。

public function AndroidApp() {

    if (isset($_POST["myHttpData"])) {

       $coupon = trim($_POST["myHttpData"]);


        $couponId = $this->Code->find('all', array(
            'conditions' => array(
                'Code.coupon_code' => $coupon,
                'Code.status' => 'Used'
            ),
            'fields' => array('Code.id')));

        $studentAssessmentId = $this->StudentAssessment->find('all', array(
            'conditions' => array(
                'StudentAssessment.code_id' => $couponId[0]['Code']['id'],
                'StudentAssessment.status' => 'Complete'
            ),
            'fields' => array('StudentAssessment.id')));

        $scores = $this->AssessmentScore->find('all', array(
            'conditions' => array(
                'AssessmentScore.student_assessment_id' => $studentAssessmentId[0]['StudentAssessment']['id']
            ),
            'fields' => array('AssessmentScore.score')));

        $json = array();
        $assessment_data = array();

        //debug($scores);
        $i = 0;
        foreach ($scores as $score) {
            $assessment_data[$i] = array("score" => $score['AssessmentScore']['score']);
            $i+=1;
        }

        header('Content-type: application/json');


        $json['success'] = $assessment_data;

        $android = json_encode($json);
    } else {
        $json['error'] = "Sorry, no score is available for this coupon code!";
        $android = json_encode($json);
    }
    echo $android;
4

1 に答える 1

0

コードの匂い、cakephp 以外の標準

まず第一に、他の人のコメントで述べたように、CakePHP 要求/応答オブジェクトを使用していません。このため、物事を過度に複雑にしています。こちらのドキュメントを参照してください。 http://book.cakephp.org/2.0/en/controllers/request-response.html http://book.cakephp.org/2.0/en/controllers/request-response.html#dealing-with-content-types

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

表示フィールドとして 'score' を使用して を$scoresに置き換えた場合、クエリ結果を再フォーマットするためのループはおそらく冗長です。ここのドキュメントを参照してくださいhttp://book.cakephp.org/2.0/en/models/retriving-your-data.html#find-listfind('all')find('list')

バグ

また、コードにいくつかのバグがあるようです。

  • content-type ヘッダーは、$_POST["myHttpData"]存在する場合にのみ送信されます。
  • 実際にデータが含まれているかどうかではなく、$_POST["myHttpData"]存在するかどうかのみを確認しています(空)
  • さまざまなクエリが結果を返すかどうかを確認していません。クエリが何も返さなかった場合、コードでエラーが発生します。たとえば、それが存在すると仮定します$couponId[0]['Code']['id'](ただし、クーポン コードが見つからない場合はそうではありません)。

可能な答え

これらの問題とは別に、問題の原因として最も可能性が高いのは、'autoRender' を無効にしていないことです。そのため、CakePHP は JSON を出力した後にビューもレンダリングし、不正な形式の JSON 応答を引き起こします。

public function AndroidApp() {
     $this->autoRender = false;

     // rest of your code here

}
于 2013-03-15T23:17:55.390 に答える