2011-08-14 3 views
0

Pourquoi ces données ne sont-elles pas envoyées à mon contrôleur? Aucun signe de jsonForm dans firebug. Pas d'alerte de succès.jQuery Formulaire AJAX ne pas envoyer

JS

$('form').submit(function() { 

    var title = $('#title:input').val(); 

    alert(title); 

    var urlsStr = $("#links").val(); 
    var urls = urlsStr.match(/\bhttps?:\/\/[^\s]+/gi); 
    var formData = { 
    "title": title, 
    "urls": urls 
    } 
    var jsonForm = JSON.stringify(formData);     

    $.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    cache: false, 
    data: { jsonForm: jsonForm }, 
    url: 'publishlinks/publish', 
    success: 
     function(response) { 
     alert('winrar'); 
     } 
    }) 
}) 

Contrôleur

function publish() { 

    $form = $this->input->get('jsonForm'); 

    echo json_decode($form); 

    $data = array(

    'movieid' => $this->input->post('id') 

); 

    $this->load->model('publish_model'); 
    $this->publish_model->add_record($data); 
    $this->load->model('NewsFeed_model'); 
    $feed['queryMovies'] = $this->NewsFeed_model->getPublications();   
    $this->load->view('news_feed_view', $feed);  

} 
+0

pas Avez-vous l'intention de faire: 'url: '/ publishlinks/publier',' avec un chemin relatif? Vous pouvez également ajouter un rappel d'échec à la fonction ajax: http://api.jquery.com/jQuery.ajax/ – PeeHaa

Répondre

1

Ne pas oublier des points-virgules. Ils peuvent être importants. Et, dataType dans la demande ajax se réfère aux données revenant de la demande pas les données envoyées par la demande.

Commencez par modifier votre ajax:

$('form').submit(function(e) { 
    e.preventDefault(); 

    var title = $('#title:input').val(); 

    alert(title); 

    var urlsStr = $("#links").val(); 
    var urls = urlsStr.match(/\bhttps?:\/\/[^\s]+/gi); 
    var formData = { 
     title: title, 
     urls: urls 
    };     

    $.ajax({ 
    type: 'GET', 
    cache: false, 
    data: formData, 
    url: 'publishlinks/publish', 
    success: 
     function(response) { 
     alert('winrar'); 
     } 
    }); 
}); 

Vos données seront jointe en chaîne de requête que votre contrôleur peut alors ramasser. De l'documentation:

L'option de données peut contenir une chaîne de requête de la forme clé1 = valeur1 & key2 = valeur2, ou une carte de la forme {key1: « valeur1 », key2: « valeur2 »}. Si le dernier formulaire est utilisé, les données sont converties en une chaîne de requête en utilisant jQuery.param() avant d'être envoyé.

Modifiez votre contrôleur pour récupérer les variables de chaîne de requête.

Voici un violon: http://jsfiddle.net/jensbits/2F4kN/

+0

Je suppose que cela signifie que je dois faire le formatage JSON dans le PHP? –

+0

@amiawizard json ne semble pas être un facteur. Vous étiez en train de décoder json dans le contrôleur parce que vous pensiez que c'est ce que vous étiez en train de récupérer (je ne pense pas - pourquoi pas décoder json là-bas). Maintenant, votre contrôleur peut simplement saisir la chaîne de requête vars '$ _GET' Je crois en PHP et aller à partir de là. 'publish()' dans votre contrôleur semble créer un flux quelconque mais ne semble pas utiliser les données renvoyées par l'ajax. –

0

vous n'avez pas l'intention de faire: url: '/publishlinks/publish', avec un chemin relatif? vous pouvez également ajouter un rappel de défaut de la fonction ajax: http://api.jquery.com/jQuery.ajax/

Aussi, vous devriez vraiment ajouter un return false; ajouter à la fin de la fonction $('form').submit(function() { pour empêcher la forme d'être soumis comme « normale ».

Ou utilisez:

$('form').submit(function(e) 

e.preventDefault(); 
e.stopPropagtion(); 
+0

sans e.stopPropagtion(); il envoie des données mais ne charge pas mon flux de nouvelles. –

Questions connexes