2012-06-28 11 views
2

J'utilise codeigniter HMVC. J'essaie d'utiliser jquery ajax pour la première fois. Quand j'utilise POST alors il donne une erreur non définie alors qu'il me répond les données en utilisant GET.Post méthode ne fonctionne pas dans Codeigniter

  $.ajax({ 
      type: "POST", 
      url: filelink+"cart/add_cart_item", 
      data: {"product_id":id,"quantity":qty,"ajax":"1"}, 
      dataType: "json", 
       success: function(msg){ 
      alert("Data Saved: " + msg); 
      }, 
       error: function(jqXHR, textStatus, errorThrown){ 
      alert(textStatus + " " + errorThrown); 
      } 
     }); 

Ce que j'ai essayé jusqu'à présent après googler et SO-ing-

  1. mon emplacement URL du fichier est accessible directement. Je l'ai vérifié. donner une réponse. Firebug génère 500 erreurs internes au serveur pour le même fichier.

  2. utilisant Get qui me répond bien en arrière

  3. ajouté JSON dans le type de données

fonction de contrôleur

class Cart extends CI_Controller { // Our Cart class extends the Controller class 

    function __construct() 
    { 
    parent::__construct(); 
    $this->template->set('controller', $this); 
    } 

    function _remap() 
    { 
     $uri2 = $this->uri->segment(2); 
     if (is_numeric($uri2) OR $uri2 == FALSE) { 
     $this->index(); 
     } else if ($uri2 == 'add_cart_item') { 
     $this->add_cart_item(); 
     } else if ($uri2 == 'show_cart') { 
     $this->show_cart(); 
     } 
    } 

function add_cart_item(){ 
     echo "asdfsadfdsf"; 
     exit; 
    } 
    } 

quelqu'un peut-il s'il vous plaît me aider?

+0

Avez-vous essayé 'var_dump ($ this-> input-> post ('product_id'));'? Est-ce qu'il sort quelque chose? –

+0

@vikassharma: que contient filelink? –

+0

@vikassharma et à quoi ressemble votre base_url()? Avez-vous essayé d'utiliser l'URL complète ou simplement le nom du contrôleur et la méthode? –

Répondre

0

Géré pour trouver la solution. Le problème était dû à CI_TOKEN qui est envoyé avec le FORM. C'était absent et en raison de laquelle la méthode POST donnait 500 Erreur interne du serveur. J'ai ajouté suivant dans mon fichier de vue.

<?php echo form_open_multipart(); ?> 
<?php echo form_close(); ?> 

et envoyé ci_token avec la requête ajax post.

var ci_token = formObj.find('input[name=ci_token]').val(); 
var qty = 1; 
var dataString = 'product_id='+ id + '&quantity=' + qty + '&ajax=' + 1 
+'&ci_token=' +   ci_token; 

Ceci a résolu le problème. Je ne sais pas, mais ce qu'on appelle CSRF racontais un problème

Merci

0

Il y a des raisons possibles pour votre problème

Vous pouvez utiliser le modèle qui est pas chargé.
Il peut y avoir un problème de code dans le modèle.
Il se peut que vous ne renvoyiez rien de votre modèle et que vous en fassiez l'écho.
Aussi, si vous avez besoin des données utilisent l'écho de retour json_encode (données $)

+0

Salut Raheel, j'ai édité mon code. S'il vous plaît jeter un oeil au contrôleur. Je n'ai utilisé aucun modèle. Cela peut-il être le problème ?? – phpgeek

0

vous avez utilisé _remap fonction et après avoir uri2 $ il y a un si la vérification qui vérifie la variable de quantité que vous avez passé dans votre demande ajax et il peut avoir une valeur entière comme évident peut contenir un nombre entier. là pour

$this->uri->segment(); 

retours vous:

product_id=id 
quantity=qty 
ajax=1 

et vous prenez la valeur 2 qui est la quantité en appelant

$uri2 = $this->uri->segment(2); 

il retournera la quantité et vous n'avez pas défini un indice() fonction dans votre code qui donne 500 erreur

function _remap() 
{ 
    $uri2 = $this->uri->segment(2); 
    if (is_numeric($uri2) OR $uri2 == FALSE) { 
    $this->index(); 
    } else if ($uri2 == 'add_cart_item') { 
    $this->add_cart_item(); 
    } else if ($uri2 == 'show_cart') { 
    $this->show_cart(); 
    } 
}