2009-11-25 6 views
0

J'ai un formulaire que je souhaite soumettre via ajax usind la commande jQuery $ .post.Étrange problème de post jquery, mauvais message post est utilisé

La forme ressemble à ceci:

<form action="/wine/merlot/reviews" class="new_review" id="new_review" method="post"> 

Et l'appel jquery est:

$(document).ready(function() { 
    $('#new_review').submit(function() { 
    $.post($(this).attr('action'), $(this).serialize(), null, 'script'); 
    return false; 
    }); 
}); 

que je reçois l'erreur suivante sur le serveur:

ActionController :: MethodNotAllowed (obtenez seulement , mettre, et supprimer les demandes sont autorisés.):

De ce que je peux dire en creusant je n avec le problème console pyromanes est le poste est la publication dans ce url:

/vin/merlot au lieu de/vin/merlot/commentaires

Je ne peux pas pour la vie de me comprendre pourquoi il en est Cas.

+0

Je remarque que si je coder en dur dans le url alors les choses semblent aller très bien donc le $ (this) .attr ('action') doit échouer mais je ne vois pas comment. – KJF

+0

Étrange. Avez-vous essayé d'utiliser $ .load() ou $ .ajax() à la place? – Greg

Répondre

1

OK. Il s'avère que je suis un idiot. J'ai eu un autre div sur la page avec l'id "new_review" donc je suppose qu'il regardait le mauvais élément. Renommé et tout fonctionne maintenant.

0

Vous ne savez pas, mais essayez /wine/merlot/reviews/ au lieu de /wine/merlot/reviews?

1

Je ne pouvais pas obtenir un formulaire pour soumettre via ajax en utilisant la commande de jQuery $ avec Rails 2.

Je MODIFIÉ Railcast Ryan Bates 136 à présenter par un mis à la place. Le kludge que j'ai utilisé était de vérifier le (params [: id] == 'update') dans l'action de mise à jour pour vérifier cette requête ajax.

épisode 136/magasin/public/JavaScripts/application.js

jQuery.fn.blurWithAjax = function() { 
    this.blur(function() { 
     // GOOD .ajax javascript update action works even though create on Rails2 does not 
     jQuery.ajax({ 
     type: "PUT", 
     url: "/reviews/update", 
     data: jQuery(this).serialize(), 
     dataType: "script", 
     callback: null 
     }); 
    return false; 
    }) 
    return this; 
}; 

jQuery(document).ready(function() { 
    jQuery("#review_content").blurWithAjax(); 
}); 

Vous devez effectuer les changements parallèles aussi;

def create => Mise à jour def

app/views/commentaires/create.js.erb => app/views/critiques/update.js.erb