1

ケーキ2.1を使用して、ajaxを介してjsonレコードのリストを取得しようとしています。不足しているものが見つかりません:

ルート.phpに、追加:

Router::parseExtensions('json');

私のコントローラーのアクション:

public function getdirs($id = null) {
    $this->RequestHandler->setContent('json', 'application/json');
    $dirArray = $this->Dir->find('all');
    debug($dirArray);
    $this->set('dirArray', $dirArray);
    $this->set('_serialize', 'dirArray');
}

私の見解では(親レコード-101-を編集し、その子を取得する必要があります)、私はこのjqueryを使用しています:

function updateTable() {
    var path = "/dirs/getdirs/101.json"; 
    $.post(path,null,function(data) {
    //$.get(path, function(data) {
        alert('backFromServer');
        alert(data);
    });        
}

'backfromserver'アラートに到達していません。また、エラーがどこにあるかをテストする方法がわかりません。

jsonデータを取得すると、ビューのdivセクションがいっぱいになります。この部分はカバーされていますが、サーバーからのデータが必要です。

何日もこれに苦労していて、私は本当にいくつかの助けに感謝します。

ありがとうございました !!

更新 が.json拡張子に修正され、自動レンダリングが削除されました。ファイアバグの応答は次のとおりです。

{"code":"404","url":"\/dirs\/getdirs\/101.json","name":"Controller class Controller could not be found."}

"NetworkError: 404 Not Found - http://dev.opm.asc/dirs/getdirs/101.json"

私の行動を再確認しました。それはgetdirsallrightと呼ばれています。

public function getdirs($id = null) {
    $this->RequestHandler->setContent('json', 'application/json');
    $dirArray = $this->Dir->find('all');
    debug($dirArray);
    $this->set('dirArray', $dirArray);
    $this->set('_serialize', 'dirArray');
}

アクションが見つからない理由は何でしょうか?

一般的なビューに関しては、この場合、データ配列を取得してdivを埋めたいだけです。

助けてください。

どうもありがとう。

4

2 に答える 2

0
var path = "/dirs/getdirs/101.js";

これはすべきではありません

var path = "/dirs/getdirs/101.json";

firebugをインストールしてみてください-http: //getfirebug.com/または、chromeの開発者ツール用にchromeを使用している場合は、F12を押してください。これにより、httpのデバッグをセットアップできます。ネットワークタブを試してください。リクエストを調べて、エラーがどこにあるかを正確に確認できます。これにより、何が送信され、何が受信されているかを正確に確認できます。

また、部分的なコードを投稿したかどうかはわかりませんが、投稿した場合は次のようになります。

$this->autoRender = false;

手動でrenderを呼び出す必要があります

$this->render('path/to/view');

jsonを出力するためのアクション間で共有できる汎用ビューを作成することをお勧めします。

于 2012-09-17T23:43:37.957 に答える
0

404エラーは、コントローラー上で定義した次のような権限が原因でした。

public function isAuthorized($user) {
    $AuthAddRoles = array(0, 1);
    if ($this->request->action === 'add') {
        if (in_array($this->Auth->user('role'), $AuthAddRoles)) {
            return true;
        }
    }
}

同じ方法でajaxアクションを承認する必要があり、解決されました。

すべての良いポインタをありがとうdubvfan87。これで、json応答の最初にコードが付属し、ここで解決されます:cakephprender-falseアクションは引き続きhtmlテンプレートをエコーし​​ます

于 2012-10-01T19:53:42.070 に答える