jquery - 始终在 jQuery.ajax (Rails) 上获取错误回调

标签 jquery ruby-on-rails

我遇到了一个奇怪的错误,可能是服务器端问题。即使响应状态为 200,我的错误回调也始终会被触发!

Javascript//客户端

function save_pomodoro(){
j.ajax({
    url: '/app/save_pomodoro',
    dataType: 'json',
    cache : false,
    success: save_pomodoro_suc,
    error:   save_pomodoro_err,
    data: {
        bar: 'foo'
    }
})
}

function save_pomodoro_suc(data){
 alert("Pomodoro Saved Succesfuly")
}

function save_pomodoro_err(data){
 show_error(data.status, data.responseText) // on success => 200, "OK"
                                            // on fail 400, "bla bla bla"
}

Rails// Controller

def save_pomodoro

...

p = Pomodoro.new( params[:bar] )

if p.save
  respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.js {   render( :json => "OK" ) }
  end
else
  respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.js {   render( :json => p.errors.full_messages.to_json, :status => 400 ) }
  end
end

end

我在同一个 Controller 上有另一个函数(ajax+server),它具有有效的回调。
这对我来说很神秘,所以任何见解都会有帮助

更新:发现错误:

format.js {   render( :json => ["OK"] ) }

显然字符串本身不是有效的 json。

最佳答案

调试此问题的一种有用方法是更改​​错误处理程序的签名

function save_pomodoro_err(data)

function save_pomodoro_err(XMLHttpRequest, textStatus, errorThrown)

并添加警报或类似的警报(或使用 Firebug 进行调试)以获取 errorThrown 字符串。

这将使您能够访问抛出的特定错误消息:您可以因失败的 HTTP 状态以外的原因(例如 JSON 上的解析错误或超时)而传递到错误处理程序。

关于jquery - 始终在 jQuery.ajax (Rails) 上获取错误回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198519/

相关文章:

ruby-on-rails - Gcloud::Datastore::ApiError - Api 调用 runQuery 不工作

ruby-on-rails - Rails ActiveRecord 序列化数据 Rspec 测试

jquery - 如何在rails中异步加载部分页面

javascript - 如何使这个 jQuery 不计算列表中的子列表?

javascript - jquery动态加载链接变化

ruby-on-rails - Selenium 和上传

ruby-on-rails - 在 Rails 模板中使用条件语句修饰符

jquery - 使用 css 样式而不是 jQuery

javascript - jQuery:如何在不同的字符串中添加一个<br/>换行符来分隔2中的句子?

jquery - django-autocomplete-light 在表单中显示空下拉列表