1

私はこれに完全に行き詰まっており、何時間もの検索で結果が得られませんでした. ajax リクエストを実行しようとすると、406 エラーが発生します。これが私のコードです..

ティアコントローラー

    def index
      series = Series.find_by_id(params[:series_id])
      respond_to do |format|
        format.json { render :json => series.tiers }  
      end
    end

Javascript

    $('#series_id').change ->
      series_id = $('#series_id').val()

    $.get '/admin/tiers', {series_id:series_id}, (result) ->
      element = $('select[name *= "tier_id"]')
      element.empty()
      $.each result, (index, item) ->
        element.append $('<option/>', value:item.id, text: item.title)

そして、ここにレールサーバーから取得しているエラーがあります

      Started GET "/admin/tiers/1" for 127.0.0.1 at 2013-01-21 14:19:38 +1100
      Processing by Admin::TiersController#index as JSON
        Parameters: {"series_id"=>"1"}
        User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
          (0.1ms)  begin transaction
          (0.5ms)  UPDATE "users" SET "last_request_at" = '2013-01-21 14:19:38.827810', "perishable_token" = 'y0TMicsW2l4zgSiQcJx', "updated_at" = '2013-01-21 14:19:38.829452' WHERE "users"."id" = 1
          (2.5ms)  commit transaction
        Tier Load (0.3ms)  SELECT "tiers".* FROM "tiers" WHERE "tiers"."id" IS NULL LIMIT 1
        Tier Load (0.3ms)  SELECT "tiers".* FROM "tiers" 
        Series Load (0.2ms)  SELECT "series".* FROM "series" 
        Series Load (0.2ms)  SELECT "series".* FROM "series" WHERE "series"."id" = 1 LIMIT 1
      Completed 406 Not Acceptable in 30ms (ActiveRecord: 4.4ms)

何が詰まっているのか本当にわかりません。コントローラーは問題なく見え、コンテンツタイプはjsonのようです。

Rails 3.2.11も使用しています

4

2 に答える 2

3

とても変化しています

  respond_to do |format|
    format.json { render :json => series.tiers }  
  end

 render :json => series.tiers

問題を修正しますが、その理由はまだわかりません:(誰かがあなたの入力が大歓迎である理由を知っているなら.

于 2013-01-21T03:53:33.503 に答える
1

なぜ問題が解決したのかはわかりませんが、より良い解決策.getJSON.get.

AcceptRails は、要求されたタイプの適切な応答タイプがヘッダーで見つからない場合、406 を生成します。Fiddler2を使用して からのリクエストをスヌープすると.get、リクエスト ヘッダーが表示されます。

Accept: */*

これは、Rails が処理する情報を提供しません。JavaScript の場合のように、要求された URL に拡張.js子がある場合、それはそれからも直感的に理解できますが、JSON 要求では利用できません。

電話を.getJSONかけると、リクエスト ヘッダーが表示されます。

Accept: application/json, text/javascript, */*; q=0.01

これはおそらく、Rails が要求されたタイプを json ハンドラーに一致させるのに十分な情報です。

于 2013-01-21T04:11:09.893 に答える