$ .getJSON по-разному интерпретируется IE - Ruby on Rails - PullRequest
0 голосов
/ 26 августа 2010

Я пытаюсь сделать классические выпадающие списки -> подкатегория (при выборе чего-либо в категории заполняется подкатегория).

Код, который у меня есть, работает во всех браузерах, кроме IE (естественно).

Вот код JS, который я использую:

$("body select#category").data_binding({
    child: "select#company_subcategory_id",
    url: "subcategories",
});

   [ . . . ]

    data_binding: function(options) 
    {
            $(this).change(function()
            {
                    $.getJSON("/"+ options.url +"/",
                             { id: $(this).val(), ajax: 'true'}, 
                              function(j)
                              { 
                                    for (var i = 0; i < j.length; i++) 
                                    {
                                       options += '<option value="' + j[i].optionValue + '">';
                                       options += j[i].optionDisplay;
                                       options += '</option>';
                                    }

                                    $(child).html(options);
                              });
            });
   }

Контроллер подкатегорий

class SubcategoriesController < ApplicationController
  layout 'application'

  def index
       @subcategories = Subcategory.find_all_by_category_id(params[:id])
       respond_to do |format|
           format.js {render :json => @subcategories.collect {|sc| {:optionValue => sc.id,
                                                           :optionDisplay => sc.name} }.to_json }
          end
  end

  def show  
      @subcategory = Subcategory.category_permalink_like(params[:category]).
                                             permalink_like(params[:subcategory]).first
      @with_banner = @subcategory.companies.active.with_banner
      @without_banner = @subcategory.companies.active.without_banner
   end
end

Я отслеживаю файл development.log, и когда я использую любой браузер, кроме IE, журнал показывает

Processing SubcategoriesController#show (for 192.168.1.70 at 2010-08-26 01:49:06) [GET]
Parameters: {"id"=>"4", "_"=>"1282805337516", "show_type"=>"available_banners"}

но когда я использую IE, я получаю

Processing SubcategoriesController#create (for 192.168.1.70 at 2010-08-26 01:50:09) [POST]
Parameters: {"ajax"=>"true", "authenticity_token"=>"Eg2XAvSSHg/v12cKjTPt+HkKWhxdGW3s5n6lm9jHu2A=", "id"=>"6"}

Не определено действие создания, поэтому оно вылетает.

Понятия не имею, почему это интерпретируется по-разному: /

Есть предложения?

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 30 августа 2010

Я вспоминаю отладочную проблему, очень похожую на эту в последнее время.Если я правильно помню, это связано с типом mime & dataType, переданным в jquery.Посмотрите на использование get или getScript.

0 голосов
/ 30 августа 2010

Хорошо, это нелепое решение проблемы, но я нахожусь в тупике, и это, похоже, работает.

Я изменил контроллер подкатегорий так:

class SubcategoriesController < ApplicationController
  layout 'application'

  def index
   @subcategories = Subcategory.find_all_by_category_id(params[:id])
   respond_to do |format|
       format.js {render :json => @subcategories.collect {|sc| {:optionValue => sc.id,
                                                       :optionDisplay => sc.name} }.to_json }
      end
  end

  def show  
      @subcategory = Subcategory.category_permalink_like(params[:category]).
                                         permalink_like(params[:subcategory]).first
      @with_banner = @subcategory.companies.active.with_banner
      @without_banner = @subcategory.companies.active.without_banner
   end

   #this is the added method
   def create
      index
   end
end

по какой-то причине IE продолжает пытаться вызвать метод create в контроллере подкатегорий, где все остальные браузеры работают хорошо, и вызвать метод index

Я действительно не знаю, почему это происходит, так что этот хак сейчас придется сделать: (

Я упростил приведенный выше код, чтобы его было легче читать.

...