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

时间:2010-07-07 20:27:35

标签: 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 //控制器

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

我在同一个控制器上有另一个功能(ajax +服务器),它有工作回调 这对我来说很神秘,所以任何见解都会有所帮助

更新:发现错误:

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

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

2 个答案:

答案 0 :(得分:1)

调试此方法的一种有用方法是从

更改错误处理程序的签名
function save_pomodoro_err(data)

function save_pomodoro_err(XMLHttpRequest, textStatus, errorThrown)

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

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

答案 1 :(得分:0)

试试这个:

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