CakePHPの:Ajaxリクエストのためのコントローラ応答が間違っています

StackOverflow https://stackoverflow.com/questions/3623738

質問

私はいくつかのコントローラのアクションへのAJAXリクエストを作るためにjQueryを使用しています。この要求は、同じコントローラで編集アクションのビュー内のボタンから起動される。

私の問題: Ajaxリクエストではなく数の期待値(すべてのフォームと入力して)編集ビューのすべてのコードを返しています。私は、追加アクションのビューで同じAjaxのボタンを配置した場合、それは(それが数を返す)完璧に動作します。

編集と(ベーク付き)デフォルトで生成されるアクションの遺骨を追加します。

これは、AJAXリクエストを作るためにjQueryの関数である。

        $.ajax({
            type: 'POST',
            url: 'checkTargets',
            data: {target: tgt_array, channel: channel_type},
            success:function(data){
                $('#num_subscribers > span').html(data);
            },
            error:function(){
                $('#num_subscribers > span').html("The subscribers could not be loaded");
            },
            timeout: 5000
        });
    } 

これはアクションです。

function checkTargets() {
        if ($this->RequestHandler->isAjax()) { 
            if(!empty($this->params['form'])) {
                $data = $this->params['form'];

                if ($data['channel'] === 'SMS') {
                    $channel = 'sms';
                } else {
                    $channel = 'pin';
                }

                $targets = $this->processPostTargets($data['target']);
                $this->RequestHandler->respondAs('text');
                //This echo a NUMBER
                echo ClassRegistry::init('Selection')->countSubscribersInTarget($channel, $targets);

                Configure:: write('debug', 0);
                $this->autoRender = false;
                exit();

            }
        } 

    }

ですが、なぜでしょう?

おかげ

役に立ちましたか?

解決 2

私は問題を修正しました。これは、アヤックスの関数内のURLのparamた(noobのミス)

これはコントローラ内の参照アクションの完全なパスでなければならない。

この質問は、問題を理解するために私を助けました: にAJAXの呼び出し中にアクションURLを使用するには、のベストプラクティスCakePHPの

固定Ajaxリクエストます:

    $.ajax({
        type: 'POST',
        url: '/myapp/campaigns/checkTargets',
        data: {target: tgt_array, channel: channel_type},
        success:function(data){
            $('#num_subscribers > span').html(data);
        },
        error:function(){
            $('#num_subscribers > span').html("The subscribers could not be loaded");
        },
        timeout: 5000
    });

おかげで、私の英語

を言い訳

他のヒント

ただ、すべてにアクセスすることなく提案は、あなたはこれを試してみました?

$this->autoRender = false;
$this->layout = 'ajax';
また、私はそれをシンプルに保つことをお勧めしたい。

$.post("/controller/checkTargets", function(data) {
   alert(data);
}

function checkTargets() {
  $this->autoRender = false;
  $this->layout = 'ajax';
  echo "Im working";
}

とそこから行くます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top