2013-01-21 1 views
0

나는 이것에 완전히 머물렀다. 그리고 수 시간의 검색 결과가 나오지 않았다. 아약스 요청을하려고하면 406 오류가 발생합니다. 여기에 내 코드 ..레일 리턴 406 Ajax 요청에 사용할 수 없음

계층 컨트롤러

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

자바 스크립트 여기

$('#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 인 것처럼 보입니다. 그래서

render :json => series.tiers 

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

을 변경

I도 사용하고 레일 3.2.11

답변

1

나는 그게 문제를 해결 한 이유를 말할 수 없다. 더 나은 해결책은 .get이 아닌 .getJSON 호출을 사용하는 것입니다.

Accept 헤더에서 요청 된 유형에 대한 적절한 응답 유형을 찾을 수없는 경우 레일스가 406을 생성합니다.

Accept: */* 

이 레일을 작동 할 수있는 정보를 제공하지 않습니다 나는 .get의 요청을 스누핑 할 Fiddler2를 사용하는 경우, 내가 요청 헤더를 참조하십시오. 요청한 URL에 확장자가있는 경우 (예 : .js), JSON 요청에도 해당 URL을 사용할 수 없습니다.

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

이 아마 레일이 JSON 핸들러에 요청 된 유형과 일치하기에 충분한 정보입니다 : 나는 .getJSON 전화를 걸 때

, 내가 요청 헤더를 참조하십시오.

3

이 문제를 해결하지만, 난 여전히 확실하지 않다 왜 :(누구든지 어떤이있는 경우 왜 당신의 의견이 크게 감사 할 생각인지.

+0

특별히 요청한 형식에 더 이상 응답하지 않기 때문입니다. 요청한 형식을 무시하고 JSON 출력을 렌더링합니다. 일반적으로 Rails의 형식은 형식을 URL의 확장자로 추가하여 결정됩니다. 경로 끝의 .json을 사용하여 동일한 URL을 호출 할 수도 있습니다. – datashaman

관련 문제