41 votes

Bizarre "406 pas acceptable" erreur

Lorsque j'essaie de lancer cette action via Javascript, j'obtiens une erreur 406 Not Acceptable :

   def show
    @annotation = Annotation.find_by_id(params[:id])

    respond_to do |format|
      format.html {
         if @annotation.blank?
           redirect_to root_path
         else
           redirect_to inline_annotation_path(@annotation)
         end
       }

       format.js {
         if params[:format] == "raw"
           render :text => @annotation.body.to_s
         else
           render :text => @annotation.body.to_html
         end
       }
    end
  end
 

Ceci est de jQuery, mais je fais le bon avant d'envoyer des choses:

   $.ajaxSetup({ 
    beforeSend: function(xhr) {
      xhr.setRequestHeader("Accept", "text/javascript");
    },
    cache: false 
  });
 

Voici les en-têtes de ma demande:

 Host    localhost:3000
User-Agent  Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept  text/javascript
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  300
Connection  keep-alive
X-Requested-With    XMLHttpRequest
Content-Type    application/x-www-form-urlencoded
 

30voto

Horace Loeb Points 12901

J'ai craqué le cas!

J'ai été l'envoi d'un format paramètre avec ma requête get pour dire au serveur de m'envoyer markdown au lieu de HTML. Voici mon code Javascript:

$.get("/annotations/" + annotation_id, {format: 'raw'}, function(data) {
});

et puis j'ai été à la recherche pour ce paramètre dans l' format.js bloc:

   format.js {
     if params[:format] == "raw"
       render :text => @annotation.body.to_s
     else
       render :text => @annotation.body.to_html
     end
   }

mais, apparemment, format paramètre confond l' respond_to bloc. J'ai changé depuis {format: 'raw'} de {markdown: 'true'} , et cela fonctionne.

Je suppose que c'est un bug dans les Rails?

13voto

Casey Watson Points 9986

J'ai également eu cela lorsque j'essayais de faire une redirection depuis un bloc respond_to.

5voto

Dustin Points 41

inclure "format.js" dans votre bloc respond_to

5voto

yuvalz Points 96

Ce qui m'est arrivé lors de l'utilisation de HTTPRiot de la connexion à un JSON de rendu web app à partir d'une application iPhone. Il semble que le problème est dû à des Rails attend à une Accept - tête HTTP qui c'est bien, à l'aise avec. En tant que tel, j'ai utilisé Firefox LiveHTTPHeaders extension de voir ce que les en-têtes de travailler sans 406. En tout cas l'Accepter chaîne qui a fonctionné a été:

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Un autre domaine que je voudrais examiner est l'JSON-la production de contrôleur. Si le contrôleur est pas un format de directive de préciser qu'il peut renvoyer du JSON en réponse, que trop peut causer une erreur 406.

3voto

Sergey Zhizhin Points 388

Vérifiez votre application.js pour require jquery_ujs

 //= require jquery_ujs
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X