我遇到了一个奇怪的错误,可能是服务器端问题。即使响应状态为 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/