CakePHP: ответ контроллера на запрос Ajax неверен

Я использую jQuery, чтобы сделать запрос AJAX к некоторому действию контроллера. Этот запрос активируется с помощью кнопки в представлении действия редактирования в том же контроллере.

Моя проблема: запрос Ajax возвращает весь код представления редактирования (со всеми формами и входными данными) вместо ожидаемого числа. Если я помещу ту же кнопку ajax в представление действия добавления, она отлично работает (возвращает номер).

Действия редактирования и добавления остаются сгенерированными по умолчанию (с запеканием).

Это функция jQuery для выполнения запроса ajax.

        $.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();

            }
        } 

    }

Почему это происходит?

Спасибо


person Jose S    schedule 02.09.2010    source источник


Ответы (2)


Просто предложение, не имея доступа ко всему, вы пробовали это?

$this->autoRender = false;
$this->layout = 'ajax';

Также я бы предложил сделать это простым:

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

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

и иди оттуда.

person going    schedule 02.09.2010
comment
спасибо сяохоузи. Я пытался с этим, но я понимаю, что проблема может быть в параметре URL. Я изменил «checktargets» на «/myapp/campaigns/checkTargets», и это работает. - person Jose S; 02.09.2010
comment
@ Хосе Вместо того, чтобы оставить ваш вопрос висящим, я предлагаю добавить ваш ответ и отметить его как предпочтительный ответ (нажав на галочку). Спасает людей от мысли, что вы все еще ждете ответа. - person going; 02.09.2010
comment
Да, я сделаю это. Я хотел убедиться, что проблема решена. Еще раз спасибо - person Jose S; 03.09.2010

Я исправил проблему. Это был параметр URL в функции .ajax (ошибка нуба)

Это должен быть полный путь к указанному действию в контроллере.

Этот вопрос помог мне понять проблему: попрактикуйтесь в использовании URL-адреса действия при вызове ajax в 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
    });

спасибо и извините за мой английский

person Jose S    schedule 03.09.2010
comment
Эй, что такое «myapp» в URL? - person Girish Thimmegowda; 19.10.2013