Question

J'utilise jQuery pour faire une demande d'AJAX à une action du contrôleur. Cette demande est activée à partir d'un bouton dans la vue de l'action d'édition dans le même contrôleur.

Mon problème: La demande Ajax revient tout le code de la vue d'édition (avec toutes les formes et entrées) au lieu du nombre prévu. Si je mets le même bouton ajax dans la vue de l'action add, il fonctionne parfaitement (il renvoie le nombre).

Le modifier et ajouter des actions demeure générée par défaut (avec cuire au four).

Ceci est la fonction de jQuery pour faire la demande 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
        });
    } 

Ceci est l'action

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

            }
        } 

    }

Pourquoi est-ce qui se passe?

Merci

Était-ce utile?

La solution 2

Je résolu le problème. Il était l'URL dans param la fonction .ajax (une erreur noob)

Il doit être un chemin complet à l'action référencée dans le contrôleur.

Cette question m'a aidé à comprendre le problème: les meilleures pratiques à l'URL d'action tout en appelant l'utilisation ajax en cakePHP

Correction demande 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
    });

Merci et excusez mon anglais

Autres conseils

Juste une suggestion sans avoir accès à tout, avez-vous essayé?

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

De plus, je vous suggère de le garder simple:

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

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

et aller de là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top