CakePHP: Отговорът на контролера за Ajax заявка е грешен

Използвам jQuery, за да направя AJAX заявка към някакво действие на контролера. Тази заявка се активира от бутон в изгледа на действието за редактиране в същия контролер.

Моят проблем: Ajax Request връща целия код на изгледа за редактиране (с всички формуляри и входове) вместо очакваното число. Ако поставя същия бутон 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
благодаря xiaohouzi. Опитах с това, но разбрах, че проблемът може да е URL параметърът. Промених „checktargets“ за „/myapp/campaigns/checkTargets“ и работи. - person Jose S; 02.09.2010
comment
@Jose Вместо да оставя въпроса ви да виси, предлагам да добавите отговора си и да го маркирате като предпочитан отговор (като щракнете върху отметката). Спестява хората от мисълта, че все още чакате отговор. - person going; 02.09.2010
comment
Да, аз ще го направя. Исках да съм сигурен, че проблемът е решен. Благодаря отново - person Jose S; 03.09.2010

Оправих проблема. Това беше URL параметърът във функцията .ajax (грешка на noob)

Това трябва да е пълен път до посоченото действие в контролера.

Този въпрос ми помогна да разбера проблема: най-добрият практикувайте да използвате 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