开发者

Strange jquery post problem, wrong post url is used

开发者 https://www.devze.com 2022-12-12 05:55 出处:网络
I have a form I wish to submit via ajax usind the jQuery $.post command. The form looks like this: <form action=\"/wine/merlot/reviews\" class=\"new_review\" id=\"new_review\" method=\"post\">

I have a form I wish to submit via ajax usind the jQuery $.post command.

The form looks like this:

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

And the jquery call is:

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

I get the following error on the server:

ActionController::MethodNotAllowed (Only get, put, and delete requests are allowed.):

From what I can tell by digging in with firebugs con开发者_如何学编程sole the problem is the post is posting to this url:

/wine/merlot instead of /wine/merlot/reviews

I can't for the life of me figure out why this is the case.


OK. It turns out I'm an idiot. I had another div on the page with the id "new_review" so I guess it was looking at the wrong element. Renamed and everything working now.


I could not get a form to submit via ajax using the jQuery $.post command with Rails 2.

I modified Ryan Bates' Railcast 136 to submit via a put instead. The kludge I used was to check the (params[:id] == 'update') in the update action to check for this ajax request.

episode-136/store/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();
});

You need to make the parallel changes also;

def create => def update

app/views/reviews/create.js.erb => app/views/reviews/update.js.erb


Not sure, but try /wine/merlot/reviews/ instead of /wine/merlot/reviews?

0

精彩评论

暂无评论...
验证码 换一张
取 消