Pergunta

Estou usando o jQuery para fazer uma solicitação AJAX para alguma ação do controlador. Esta solicitação é ativada a partir de um botão na exibição da ação de edição no mesmo controlador.

Meu problema: a solicitação AJAX está retornando todo o código da visualização Editar (com todos os formulários e entradas) em vez do número esperado. Se eu colocar o mesmo botão AJAX na exibição da ação Adicionar, ele funciona perfeito (ele retorna o número).

As ações de edição e adição permanecem geradas por padrão (com bola).

Esta é a função jQuery para fazer o pedido de 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
        });
    } 

Esta é a ação

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

            }
        } 

    }

Por que isso está acontecendo?

Obrigado

Foi útil?

Solução 2

Eu corrigi o problema. Era o param da URL na função .ajax (um erro noob)

Deve ser um caminho completo para a ação referenciada no controlador.

Esta pergunta me ajudou a entender o problema:Melhores práticas para usar o URL de ação enquanto chama Ajax no CakePHP

Corrigido solicitação 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
    });

obrigado e desculpe meu inglês

Outras dicas

Apenas uma sugestão sem ter acesso a tudo, você já tentou isso?

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

Além disso, sugiro simplificar:

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

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

e vá a partir daí.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top