2010-12-13 39 views
0

我有一個在Rails控制器創建像這樣的動作:獲取軌JSON驗證錯誤

def create 
    @user = User.new(params[:user]) 
    if @user.save 
    redirect_to @user 
    else 
    respond_to do |format| 
     format.json { render :json => @user.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

而使用jQuery的AJAX方法我已經定義了一個錯誤回調,但不知道如何獲得持有JSON響應 - 即@ user.errors 對於成功的回調,你會得到一個'data'參數,但是對於錯誤你只能得到(xhr,status,error)。

如何在我的ajax錯誤回調中獲得這些json @ user.errors?

回答

0

良好的JavaScript調試做法:使用Firebug將斷點在你的錯誤回調並檢查函數的參數,下鑽,直到你找到你所需要的。如果你的函數接受所有3個參數,那麼你應該在其中的一箇中找到你的@user.errors。根據我的經驗,它可能在xhr.responseText,正如mkoryak所說。

+0

我想我發現它在status.responseText – Cameron 2010-12-13 17:44:56

+0

這非常奇怪。根據jQuery文檔:'第二個參數(除了null)的可能值是「超時」,「錯誤」,「未修改」和「parsererror」。所以地位應該是一個字符串。你要找的*應該*在xhr對象中的某處。如果它在你的狀態參數中,那麼一些奇怪的事情正在發生。我想知道你的format.json塊是不是有點不正確。 – Samo 2010-12-13 18:02:29

0

這裏是我做過什麼

var onError = function(xhr, status) { 
     var error = (status != "timeout") ? xhr.responseText : ""; 
     //at this point eval error or json.parse it 
    };