Frage

Ich bin mit jQuery eine AJAX-Anforderung zu einem gewissen Controller-Aktion zu machen. Diese Anforderung wird von einer Schaltfläche in der Ansicht der Bearbeitungsaktion in dem gleichen Regler aktiviert.

Mein Problem: Der Ajax-Request kehrt die gesamten Code der Edit-Ansicht (mit allen Formen und Eingängen) anstelle der erwarteten Zahl. Wenn ich die gleiche Ajax-Schaltfläche in der Ansicht des Add die Tat umzusetzen, es funktioniert perfekt (es gibt die Anzahl).

Die bearbeiten und hinzufügen Aktionen bleibt als standardmäßig (mit bake) erzeugt wird.

Dies ist die jQuery-Funktion, den Ajax-Request

zu machen
        $.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
        });
    } 

Dies ist die Aktion

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

            }
        } 

    }

Warum ist das passiert?

Danke

War es hilfreich?

Lösung 2

fixed ich das Problem. Es war die URL param in der Schnipsel-Funktion (ein noob Fehler)

Es sollte ein vollständiger Pfad auf die referenzierte Aktion in der Steuerung sein.

Diese Frage hat mir geholfen, das Problem zu verstehen: best practice URL verwenden Aktion während Ajax-Aufruf in CakePHP

Fixed Ajax Anfrage:

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

Dank und entschuldigen Sie mein Englisch

Andere Tipps

Nur ein Vorschlag ohne Zugriff auf alles zu haben, haben Sie versucht das?

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

Auch schlage ich würde es einfach zu halten:

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

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

und gehen von dort aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top