406 Error no aceptable al usar Jquery $ .post en Firefox pero no en Safari o Chrome

Estoy usando el comando Jquery (1.3.2) $ .post para activar una llamada ajax a un servidor de Rails.

El código funciona muy bien en Safari y en Google Chrome (mac), pero cuando lo probé en Firefox (3.5.7), obtuve un extraño error “406 No aceptable”.

Cuando miro los encabezados, Firefox indicó que solo aceptaba respuestas de ‘texto / javascript’. Y la respuesta Content-Type fue ‘text / html; conjunto de caracteres = utf-8 ‘.

En Chrome, los tipos aceptados fueron ‘application / json, text / javascript, / , text / javascript’ y la respuesta Content-Type fue ‘application / json; conjunto de caracteres = utf-8 ‘.

Intenté forzar el tipo de contenido en Rails a ‘texto / javascript’

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

El tipo de contenido se modificó en Chrome, pero no en Firefox, donde permanece ‘text / html’.

Aquí está el código que utilicé para activar la llamada ajax.

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

¿Hay algo que pueda hacer para que esto funcione en Firefox? Gracias

Agregue una extensión .json a su URL en la llamada posterior

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

O (posiblemente mejor) agregue lo siguiente a su application.js para establecer encabezados para todas las solicitudes de ajax

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

Tenía el mismo problema. Parece ser un problema de firefox.

Esto funciona:

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

El crédito va a este blog.

Atentamente. Asbjørn Morell

No tiene sentido que diferentes navegadores vean diferentes encabezados HTTP. Tal vez este es un problema de almacenamiento en caché.

Estoy usando la opción contentType durante la llamada $ .ajaxSetup para establecer el tipo de contenido explícitamente. Ese trabajo está en todos los navegadores: http://api.jquery.com/jQuery.ajax/

Ninguna de las sugerencias anteriores (atmorell, Paul Groves) lo solucionó por mí … luego encontré que jquery $ .ajax no funciona en firefox contra Rails (406 respuesta) (funciona en chrome e IE)

Como comenté allí, ¡la respuesta aceptada funcionó! (usando format.js en lugar de format.json, y “render: text => item.to_json”)

Para el registro, no estoy haciendo una llamada recta .ajax; más bien estoy usando el autocompletador de JQuery.UI:

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

Y esto en mi TasksController:

 # 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 

a la Railscast # 102.