2010-09-02 6 views
3

J'utilise jQuery pour effectuer une requête AJAX sur 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.CakePHP: La réponse du contrôleur pour la requête Ajax est erronée

Mon problème: La requête Ajax retourne tout le code de la vue d'édition (avec tous les formulaires et les entrées) au lieu du nombre attendu. Si je mets le même bouton ajax dans la vue de l'action add, ça marche parfaitement (ça renvoie le nombre). Les actions d'édition et d'ajout restent telles que générées par défaut (avec cuisson).

Ceci est la fonction 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

Répondre

4

J'ai résolu le problème. C'était le paramètre d'URL dans la fonction .ajax (une erreur noob)

Il doit s'agir d'un chemin complet vers l'action référencée dans le contrôleur.

Cette question m'a aidé à comprendre le problème: best practice to use action url while calling ajax in cakePHP

fixe 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 excuse mon anglais

+0

Hey, qu'est-ce que 'myapp' dans url? –

5

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

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

Aussi je vous suggère de garder les choses simples:

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

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

et aller de là.

+0

grâce xiaohouzi. J'ai essayé avec cela, mais je devine que le problème pourrait être l'URL param. J'ai changé 'checktargets' pour '/ myapp/campaigns/checkTargets' et ça marche. –

+0

@Jose Plutôt que de laisser votre question suspendue, je suggère d'ajouter votre réponse et de la marquer comme votre réponse préférée (en cliquant sur la coche). Sauve les gens de penser que vous attendez toujours une réponse. – going

+0

Oui, je le ferai. Je voulais être sûr que le problème était résolu. Merci encore –