2013-01-05 5 views
2

J'ai démarré mon premier projet CodeIgniter et j'ai beaucoup de mal à faire un appel Ajax à mon contrôleur. J'ai mis une simple déclaration d'écho dans le contrôleur, mais je reçois une erreur de console dans le navigateur - POST http://localhost:8888/lotto/get_results/ 404 (Not Found). Cela me porte à croire que je ne référence pas le contrôleur correctement dans l'appel AJAX. Voici le code pertinent.Appel AJAX infructueux au contrôleur à l'aide de CodeIgniter

Voir - index.php

$(document).ready(function(){ 
    $('#notification').hide(); 
    retrieveValues(); 
}); 

$('.numDraws').change(function(){ 
    retrieveValues(); 
}); 

function retrieveValues() { 
    if (!checkConnection()) { 
     $('#notification').html("<span>No internet connection available</span>"); 
     $('#notification').slideDown(500, 'linear'); 
     return; 
    } else { 
     $('#notification').slideUp(500, 'linear'); 
     $('#loading').fadeIn(200); 
     var numOfDraws = parseInt($('.numDraws').find('option:selected').val()); 
     if (isNaN(numOfDraws)) { 
      numOfDraws = "ALL"; 
     } 
     $.ajax({ 
      url: "/lotto/get_results/", 
      type: "post", 
      data: {numOfDraws:numOfDraws}, 
      success: function (data) { 
       // var json = $.parseJSON(data); 
       // setTimeout(function(){displayResults(json)} ,1200); 
       alert(data); 
      } 
     }); 
    } 

} 

Controller - lotto.php

<?php 

class Lotto extends CI_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('lotto_model'); 
    } 

    public function index() 
    { 
     $data['title'] = "Home"; 

     $this->load->view('templates/header', $data); 
     $this->load->view('lotto/index'); 
     $this->load->view('templates/footer'); 

    } 

    public function get_results($numOfDraws) { 
     //$data['results'] = $this->lotto_model->get_results(1); 
     echo "Reached the controller"; 
    } 
} 
?> 

également dans mon fichier config j'ai les suivantes:

$config['base_url'] = ''; 
$config['index_page'] = ''; 
$config['uri_protocol'] = 'AUTO'; 

Toute aide serait appréciée Ated - J'ai passé beaucoup de temps à ce sujet, mais je n'arrive pas à le comprendre.

+0

Avez-vous essayé: url: "/lotto/get_results/lotto.php" ??? 404 signifie que votre URL ne peut pas être trouvée –

+0

Pas sûr, mais si vous supprimez le dernier '/' de votre URL cela fonctionne? (/ lotto/get_results) – Pierrickouw

+0

@GreenLeaf Non, la suppression de la barre oblique finale entraîne la même erreur de console – garethdn

Répondre

3

Vous êtes probablement confronté à une erreur car la méthode attend un argument que vous ne fournissez pas (et le routeur ne peut pas utiliser l'appel correctement). Essayez ce 2 choses:

1) caisse une URL en utilisant les fonctions intégrées (pour éviter des problèmes avec cela):

url: "<?php echo site_url('lotto/get_results');?>" 

2) Puisque la méthode ressemble devrait recevoir une variable POST, et non un GET un, vous devez chercher la bonne façon:

public function get_results() { 
     $numOfDraws = $this->input->post('numOfDraws'); 
     //do something with $numOfDraws here 
     echo $numOfDraws; // just to check the value is being passed 
    } 

le passage d'un argument à la méthode fonctionne si la variable provient d'une requête HTTP GET, ce qui est votre cas. Si c'est votre intention, à la place, vous devez supprimer le type "POST" dans l'appel AJAX et fournir une valeur lors de la construction de l'URL AJAX. Somethng comme

url: "<?php echo site_url('lotto/get_results');?>/"+numOfDraws; 

Dans ce cas, votre méthode serait get_result($draws), avec le paramètre

+0

Merci d'avoir expliqué cela, c'est beaucoup plus clair maintenant et l'appel au contrôleur fonctionne maintenant - c'était la mauvaise URL. – garethdn