2013-01-23 3 views
0

Je réussis à enregistrer la valeur d'entrée en utilisant ajax post mais ne charge pas la page suivante.CodeIgniter: jQuery poster et charger page suivante

client Code Side:

<script type="text/javascript"> 
    function notifyEmail() { 

     var form_data = { 
        'email':$('#inviteEmail').val() 
       }; 
     alert($('#inviteEmail').val()); 
     $.ajax({ 
        url: "<?php echo site_url('main/email_invites'); ?>", 
        type: 'POST', 
        data: form_data, 
        success: function(msg) { 
        return true; 
        } 
      }); 
    } 
    </script> 

<input type='text' id='inviteEmail' placeholder='Enter email'/> 
     <a href='#' name='email' id='invite-all' onclick='notifyEmail();' class='btn'>Notify Me</a> 

Code du contrôleur:

function email_invites() 
    { 
     $this->load->model('emailInvites'); 
     if($query = $this->emailInvites->saveEmailInvite()) 
     { 
       $this->load->view('emailInvites'); 

     } 
    } 
+1

pour une chose, vous avez '$ query =' au lieu de ' $ query == '. Était-ce intentionnel? D'autre part, vous posterez par AJAX, ce qui signifie que vous devrez utiliser Javascript pour charger la page suivante après la fin du POST (dans votre fonction 'success'). À l'heure actuelle, vous renvoyez juste un tas de HTML à votre fonction de succès, vous ne redirigez pas l'utilisateur. – glomad

+0

Le signe d'affectation était une faute de frappe. Merci de l'avoir signalé. Comment rediriger l'utilisateur en utilisant jQuery ajax? –

+0

Un moyen facile de le faire: Au lieu de '$ this-> load-> view (...', il suffit de renvoyer une chaîne comme '' ok'' .Puis dans votre succès, assurez-vous que 'msg' ==' ' Si oui, 'window.location.href = 'new_url'' Si ce n'est pas le cas, alerter l'utilisateur de l'échec de la publication – glomad

Répondre

1

Ce que je fais est le suivant qui pourrait vous aider à

<script type="text/javascript"> 
    function notifyEmail() { 

     var form_data = { 
        'email':$('#inviteEmail').val() 
       }; 
     alert($('#inviteEmail').val()); 
     $.ajax({ 
        url: "<?php echo site_url('main/email_invites'); ?>", 
        type: 'POST', 
        data: form_data, 
        dataType:'json', 
        success: function(msg) { 
        if(msg.response) 
         //load the content in the body or wherever you want 
         jQuery('body').load("<?php echo site_url('main/email_invites/show'); ?>"); 
        else 
         console.log("Opps, Something wrong happend"); 
        return true; 
        } 
      }); 
    } 
    </script> 


    <input type='text' id='inviteEmail' placeholder='Enter email'/> 
    <a href='#' name='email' id='invite-all' onclick='notifyEmail();' class='btn'>Notify Me</a> 

Dans le contrôleur

function email_invites($action = 'process') 
    { 
     if($action == 'process') 
     { 
       $this->load->model('emailInvites'); 
       $query['response'] = $this->emailInvites->saveEmailInvite(); 
       echo json_encode($query); 


     } 
     else 
     { 
       $this->load->view('emailInvites'); 
     } 
    } 
0

Vous n'avez pas besoin de faire écho l'url, il suffit d'utiliser dans l'appel ajax comme celui-ci,

$.ajax({ 
       url: 'main/email_invites', 
       type: 'POST', 
       data: form_data, 
       success: function(msg) { 
       return true; 
       } 
     }); 

Si la méthode site_url renvoie l'URL requise, l'appel ajax doit être,

$.ajax({ 
       url: "<?php echo site_url('main/email_invites'); ?>", 
       type: 'POST', 
       data: form_data, 
       success: function(msg) { 
       return true; 
       } 
     });