Rails 3.0.9 Ajax-ответ не выполнен - PullRequest
0 голосов
/ 17 августа 2011

Я использую Rails 3.0.9 и jQuery 1.6.2 с jQuery-ujs.

В основном я бы хотел ajaxfy мое действие "добавить в корзину".

В моемview:

<td><%= button_to "Add to cart", line_items_path(:coupon_id => coupon, :format => :js), :remote => true %>

В моем контроллере:

def create
@cart = current_cart
coupon = Coupon.find(params[:coupon_id])
@line_item = @cart.add_coupon(coupon.id)

respond_to do |format|
  if @line_item.save
    format.html { redirect_to(@line_item.cart) }
    format.js   {render :layout => false, :content_type => 'text/javascript'}
    format.xml  { render :xml => @line_item, :status => :created, :location => @line_item }
  else
    format.html { render :action => "new" }
    format.js   {render :layout => false, :content_type => 'text/javascript'}
    format.xml  { render :xml => @line_item.errors, :status => :unprocessable_entity }
  end
end

end

Я также создал create.js.erb:

$("#my_cart").html("<%= escape_javascript(render(:partial => 'layouts/mycart')) %>");

для обновления номера элемента корзины при добавлении нового элемента.

Когда я нажимаю кнопку «добавить в корзину», на сервер отправляется запрос JS POST:

    Started POST "/line_items.js?coupon_id=1" for 127.0.0.1 at Thu Aug 18 00:04:31 +0800 2011
  Processing by LineItemsController#create as JS

И ответ от сервера:

Rendered layouts/_mycart.html.erb (5.3ms)
Rendered line_items/create.js.erb (28.9ms)
Completed 200 OK in 127ms (Views: 58.7ms | ActiveRecord: 3.0ms)

В теле ответа содержится код javascript для обновления моей корзины:

$("#my_cart").html("<li id=\"my_cart\"><a href=\"/carts/10\">My cart(1)<\/a>\n<\/li>");

Однако веб-страница не обновляется.Я пробовал разные браузеры (Chrome, Firefox, Safari).Но если я вручную запустил этот код в консоли Firebug, страница обновилась.Я погуглил один день и попробовал разные решения.Никто из них не работал со мной.Может ли кто-нибудь решить мою проблему?

Вот код, сгенерированный для button_to:

<form method="post" action="/line_items.js?coupon_id=1" data-remote="true" class="button_to"><div><input type="submit" value="Add to cart" /><input name="authenticity_token" type="hidden" value="MdHScf0JVNu2UFXLxuindDvZ5TPBztfMMzv57w1LWX8=" /></div></form>

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Проблема решена!

Я создал новый проект с такими же настройками и попробовал, если там работает ajax.Удивительно, но так и было.Поэтому я пришел к выводу, что в моем проекте должны быть неправильные настройки.

И я нашел и удалил это из своего application_controller.rb:

  def set_charset   
      headers["Content-Type"] = "text/html; charset=utf-8" 
  end   

  def configure_charsets   
      response.headers["Content-Type"] = "text/html; charset=utf-8" 
      suppress(ActiveRecord::StatementInvalid) do 
        ActiveRecord::Base.connection.execute 'SET NAMES UTF8' 
      end   
  end

Я скопировал этот код из учебника для настройкинабор символов.Не знаю точно, почему это все испортило, но я мог бы продолжить свой проект сейчас!

0 голосов
/ 17 августа 2011

Насколько я могу судить, это выглядит довольно хорошо. Вот некоторые вещи, которые я бы попробовал в загадке, например: попробуйте вывести :format=>'js' в URL-адресе вашей кнопки (я уверен, что rails знает, что он должен быть отформатирован для js). Вместо блока respond_to do |format| попробуйте избавиться от всего этого и используйте respond_with(@line_item) В верхней части вашего контроллера обязательно укажите respond_to :js.

Я согласен с комментариями, в которых предлагается сделать простое предупреждение вместо частичного отображения escape_javascript.

Если по-прежнему ничего не получается, переключитесь на link_to и посмотрите, сможете ли вы получить какие-либо результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...