2010-02-11 2 views
4

Jquery (1.3.2) $ .post 명령을 사용하여 레일즈 서버에 대한 ajax 호출을 시작합니다.

코드는 Safari 및 Google 크롬 (Mac)에서 훌륭하게 작동하지만 Firefox (3.5.7)에서이 코드를 사용하면 '406 Not Acceptable'이라는 이상한 오류가 나타납니다.

헤더를 보면 파이어 폭스가 'text/javascript'응답 만 받아 들였음을 나타냅니다. 응답 Content-Type은 'text/html'이었습니다. charset = utf-8 '.

Chrome에서 허용되는 유형은 'application/json, text/javascript, /, text/javascript'이고 응답 Content-Type은 'application/json'입니다. charset = utf-8 '.

나는 그것이 'text/html과'남아있는 곳 콘텐츠 형식이 실제로 파이어 폭스에서 크롬으로 변경되는 것이 아니라

format.json do 
    render :json => @races.to_json, :content_type => 'text/javascript' 
end 

레일에에 '텍스트/자바 스크립트'콘텐츠 유형을 강제로했습니다.

다음은 아약스 호출을 트리거하는 데 사용한 코드입니다.

$.post(
    "/locator", 
    params, 
    function(data){...}, 
    "json" 
); 

Firefox에서이 작업을 수행 할 수있는 방법이 있습니까? 감사합니다.

답변

4

는 포스트 호출 (아마도 더 나은)

$.post(
"/locator.json" 
... 

또는 모든 아약스 요청에 대한 헤더를 설정하여 application.js에 다음을 추가 귀하의 URL에 .json 확장 추가

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} 
}) 
+0

폴 감사합니다. jQuery.ajaxSetup이 도움을주지 못했지만 처음 회신을 받았습니다. ajax 호출ajaxlocator.json 전용 레일에 특정 경로를 만들었으니 이제는 제대로 작동합니다! 감사합니다. . – jlfenaux

+0

첫 번째 솔루션은 저에게도 효과적이었습니다, 폴 감사합니다! –

0

다른 브라우저에서 다른 HTTP 헤더를 볼 수는 없습니다. 아마도 이것이 캐싱 문제 일 것입니다.

+0

@ Kgiannakakis http://stackoverflow.com/questions/2242418/inheriting-baseclass-to-an-ajax-enabled-wcf-service-class 및 http://stackoverflow.com/questions에 대한 해결책을 제안 해주세요./2242788/ajax-enabled-wcf-service-doesnt-seem-to-work-for-me –

0

콘텐츠 유형을 명시 적으로 설정하기 위해 $ .ajaxSetup 호출 중에 contentType 옵션을 사용하고 있습니다. 그 작업의에서 브라우저 : http://api.jquery.com/jQuery.ajax/

4

같은 문제가있었습니다. 그것은 파이어 폭스 문제로 보인다.

이 작동 :

jQuery.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript,application/javascript,text/html")} }) 

Credit goes to this blog.

감사합니다. 위의 제안 Asbjørn Morell

+0

이것은 나에게 훨씬 더 나은 대답이다; 단순히 파이어 폭스를 처리하는 글로벌 옵션을 설정! Paul Groves의 jQuery.ajaxSetup이 이미 내 application.js에 있었지만이 방법으로 수정되었습니다. 건배! –

-1

없음 (atmorell, 폴 그 로브는) 내가 거기 주석, 허용 대답이 일을 그런 다음 내가 jquery $.ajax not working in firefox against rails (406 response) (works in chrome & IE)

발견 ... 나를 위해 그것을 해결하지! (format.json이 아닌 format.js를 사용하고 "render : text => item.to_json")

나는 똑바로 .ajax 호출을하지 않을 것이다. 오히려 저는 JQuery를 사용하고 있습니다.UI의 Autocompleter에 내 TasksController에서

$(document).ready(function() { 
    $("input#task_summary_task_wbs").autocomplete({ 
     source: "/tasks/summary.js" 
    }); 
}); 

이 :

# GET /tasks/summary.js 
def summary 
    @tasks = Task.find(:all, 
        :conditions => ['is_summary = true AND wbs like ?', 
            "%#{params[:term]}%"], 
        :order => :wbs) 
    respond_to do |format| 
    format.js { 
     render :text => @tasks.collect {|t| t.wbs_name}.to_json 
    } 
    end 
end 

라 Railscast 번호 (102).

관련 문제