2010-09-02 1 views
3

Я использую jQuery для запроса AJAX к некоторому действию контроллера. Этот запрос активируется с помощью кнопки в виде действия редактирования в том же контроллере.CakePHP: Ответ контроллера на ошибку Ajax неверен

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

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

Это функция 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(); 

      } 
     } 

    } 

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

Благодаря

ответ

4

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

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

Этот вопрос помог мне понять проблему: best practice to use action url while calling ajax in cakePHP

Fixed 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 
    }); 

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

+0

Эй, что такое 'myapp' в url? –

5

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

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

Кроме того, я бы предложил сохранить его простым:

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

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

и идти оттуда.

+0

Thanks xiaohouzi. Я попытался с этим, но я понимаю, что проблема может быть параметром URL. Я изменил 'checktargets' для '/ myapp/campaign/checkTargets', и он работает. –

+0

@Jose Вместо того, чтобы оставлять свой вопрос висящим, я предлагаю добавить свой ответ и отметить его как ваш предпочтительный ответ (нажав на галочку). Экономит людей, думая, что вы все еще ожидаете ответа. – going

+0

Да, я сделаю это. Я хотел убедиться, что проблема решена. Еще раз спасибо –