1

Javascript/jQuery を介してユーザーから使用済み携帯電話に関する情報を収集するリコマース サイトに取り組んでいます。

1) jQuery/AJAX を使用して AJAX "投稿" を使用して呼び出します。2) 見積もりデータを返すので、価格を表示できます。ユーザー

これが私がこれまでに持っているものです:jQuery関数呼び出し:

var data =
    {
        device_id: quote['device_id'], 
        carrier_id: quote['carrier_id'], 
        condition_id: quote['condition_id'], 
        size: quote['size']
    };

    // Pull quote using AJAX
    $.ajax({
        type: "post",
        url: "/c4c/quotes/get_quote",
        data: data,
        dataType: 'json',
        success: function(data, textStatus, jqXHR){
            alert('success');
            alert(jqXHR.responseText);
            $('#quote').html(jqXHR.responseText);
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('error');
            alert(jqXHR.responseText);
            $('#quote').html(jqXHR.responseText);
        }
    });

引用コントローラーのメソッド:

        // Gets a quote's price via ajax
    public function get_quote(){
    $this->layout = 'ajax';

    $device_id = $this->request->data['device_id'];
    $carrier_id = $this->request->data['carrier_id'];
    $condition_id = $this->request->data['condition_id'];
    $size = $this->request->data['size'];

    // Get quote
    $quote = $this->Quote->find('first', array('conditions'=>array('Quote.device_id'=>$device_id,
                                                                   'Quote.carrier_id'=>$carrier_id,
                                                                   'Quote.condition_id'=>$condition_id,
                                                                   'Quote.size'=>$size,
                                                                    )));

    $this->set('quote',$quote);

    //$this->render('get_quote');
    return json_encode($quote);
}

エラーが発生し続けるので、自分のやっていることは間違っていることはわかっていますが、CakePHP のサイトでも Google 経由でも答えが見つからないようです。

どんな助けでも大歓迎です!

4

1 に答える 1

0

あなたの状況の簡単な修正は次のとおりです。

最初にやらないことreturn json_encode($quote);- ajax レスポンス用のビュー ファイルを作成します。次の場所にある必要がありますApp/View/Quotes/Ajax/get_quote.ctp

次に、応答変数を設定します。 $this->set('quote', $quote);

あなたが使用していると思われるデフォルトの ajax レイアウトは単なる空のレイアウトであるため、いくつかのヘッダーも設定する必要があります。次の場所にレイアウト ファイルを作成します。App/View/layouts/ajax.ctp

これは、基本的な PHPheader()関数を使用して行うことができます。

header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
header('Content-Type: application/json');
echo $content_for_layout;

Cache-control ヘッダーがあるため、ajax データのキャッシュはまったくありません。リクエスト/レスポンス モニタリング ツールを使用している場合 (これを行う必要があります)、レスポンスが JSON として直接識別されるようになったことに気付くでしょう。次に、ビューで次のことができます。

echo json_encode($quote);

あなたが提供した乏しい情報に基づいて、これはあなたのケースを解決するはずですが、CakePHPで「json/ajaxを実行するのが最善ですか?」ここにいくつかの手順があります。

  1. Router::parseExtensions();を使用します。次の方法で、どのリクエストが来ているかを簡単に識別できます。
  2. RequestHandlerComponentの isXml() (または is('ajax')) メソッドで入ってくるものを確認してください
  3. 応答のレンダリングには、データ ビュー ( JSON および XML ビュー) を使用します。実際には、シリアル化キーでデータ ビューを使用するか、ビュー ファイルでデータ ビューを使用するかの 2 つの選択肢があります。選択はあなた次第です。
  4. 中央の ajax レイアウトを使用し、好きなヘッダーを設定しますRequestHandlerComponent::setContent($name, $type = null)-こちら をご覧ください。コントローラーの beforeFilter() で setContent() を呼び出す必要があることに注意してください。
于 2012-09-23T07:34:46.557 に答える