繁体   English   中英

406在Firefox中使用Jquery $ .post但在Safari或Chrome中不使用时,不可接受错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM