0

返されたjsonを取得するajax呼び出しがありますが、解析エラーが発生しています。問題ないように見えますが、cakephp のセットアップで何が欠けているのかわかりません。

{"member":{"Member":{"total_points":"18"}}}

SyntaxError: 無効なラベル

エラーは最初の引用にあります

CakePHP 2.0

jQuery1.9.1

jQuery コード:

$('document').ready(function() {
    $.ajax({
        url: 'http://mydomian.com/loyalty/members/api/5749.json',
        dataType: 'jsonp',
        success: function(response) {
            console.log(resonse);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(jqXHR, textStatus, errorThrown);
        }
    });
});

私はもともとviews/members/json/api.ctpにファイルがありませんでしたが、同じエラーが発生しましたが、このコードがファイルに含まれています。

<?php echo $callback; ?>(<?php echo json_encode($member) ?>);

メンバーコントローラー.php

public function api($mem_id = null) {
    $options = array(
        'fields' => array('Member.total_points'),
        'conditions' => array('Member.member_no' => $mem_id),
        'recursive' => -1
    );
    $members = $this->Member->find('first', $options);
    $this->set(array(
        'member' => $members,
        '_serialize' => array('member')
    ));
}

json をhttp://jsonlint.com/に入れましたが、正常に戻ってきました

ここに画像の説明を入力

4

1 に答える 1

0

JSONP リクエスト、つまりクロスドメイン リクエストには、JSON データが渡された関数呼び出しである適切な JSONP レスポンスが必要です。

functionName({"key":"value"});

関数名は、デフォルトで jQuery によって自動的に定義されますが、jsonpCallbackオプションを使用してオーバーライドできます。この名前は指定された URL にパラメーターとして渡されるため、AJAX 要求は次のようになります。

http://mydomian.com/loyalty/members/api/5749.json?callback=FunctionName...

ところで、生成された関数名は、追加した画像のエラーで確認できますError: jQuery... was not called

そのため、リクエストで渡された関数名を使用して適切なレスポンスを作成する必要があります。これにはビュー ファイルを使用する必要があるため、JsonView.

コントローラーでは、ビュー var を設定せず、jQuery によって送信された var とコールバック クエリ値_serializeのみを設定します。member

$this->set(array(
    'member' => $members,
    'callback' => $this->request->query['callback']
));

次に、.ctpビューファイルでデータを出力し$callbackて、関数名として使用して関数呼び出しの形式になるようにします。

<?php echo $callback; ?>(<?php echo json_encode($member) ?>);

応答は次のようになります。

jQuerySomeRandomNumbersHere({"member":{"Member":{"total_points":"18"}}});

于 2013-09-13T14:02:36.607 に答える