[英]406 Not Acceptable error when using Jquery $.post in Firefox but not in Safari or Chrome
我正在使用Jquery(1.3.2)$ .post命令来触发对rails服务器的ajax调用。
该代码在Safari和Google Chrome(Mac)上运行良好,但当我在Firefox(3.5.7)上尝试时,我得到了一个奇怪的“406 Not Acceptable”错误。
当我查看标题时,Firefox表示它只接受'text / javascript'响应。 并且响应Content-Type是'text / html; 字符集= UTF-8' 。
在Chrome中,接受的类型是'application / json,text / javascript, / ,text / javascript',响应Content-Type是'application / json; 字符集= UTF-8' 。
我试图将rails中的内容类型强制为'text / javascript'
format.json do
render :json => @races.to_json, :content_type => 'text/javascript'
end
Chrome中的内容类型确实已更改,但Firefox中的内容类型仍为“text / html”。
这是我用来触发ajax调用的代码。
$.post(
"/locator",
params,
function(data){...},
"json"
);
我有什么办法可以让它在Firefox中运行吗? 谢谢
在post调用中为您的URL添加.json扩展名
$.post(
"/locator.json"
...
或者(可能更好)将以下内容添加到application.js以设置所有ajax请求的标头
jQuery.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})
有同样的问题。 这似乎是一个火狐问题。
这有效:
jQuery.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript,application/javascript,text/html")} })
最好的祝福。 AsbjørnMorell
不同的浏览器看到不同的HTTP标头是没有意义的。 也许这是一个缓存问题。
我在$ .ajaxSetup调用期间使用contentType选项来显式设置内容类型。 跨浏览器的工作: http : //api.jquery.com/jQuery.ajax/
以上建议(atmorell,Paul Groves)都没有为我修复...然后我发现jquery $ .ajax在firefox中没有使用rails(406响应)(适用于chrome和IE)
正如我在那里评论的那样,接受的答案有效! (使用format.js而不是format.json,以及“render:text => item.to_json”)
为了记录,我不是直接的.ajax电话; 而我正在使用JQuery.UI的自动完成器:
$(document).ready(function() {
$("input#task_summary_task_wbs").autocomplete({
source: "/tasks/summary.js"
});
});
这在我的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
la Railscast#102。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.