Всегда получайте сообщение об ошибке на jQuery.ajax (Rails) - PullRequest
2 голосов
/ 08 июля 2010

У меня странная ошибка, скорее всего, это проблема на стороне сервера. Мой обратный вызов ошибки всегда срабатывает, даже если статус ответа 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"
}

Рельсы // Контроллер

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 ]

1 голос
/ 08 июля 2010

Один из полезных способов отладки - изменить сигнатуру вашего обработчика ошибок с

function save_pomodoro_err(data)

на

function save_pomodoro_err(XMLHttpRequest, textStatus, errorThrown)

и добавить предупреждение или что-то подобное (или отладить с помощью Firebug), чтобы получить строку errorThrown.

, которая предоставит вам доступ к конкретному сгенерированному сообщению об ошибке: вы можете быть переданы в обработчик ошибок по причинам, отличным от сбойного состояния HTTP, таким как ошибка синтаксического анализа приJSON или тайм-аут.

0 голосов
/ 08 июля 2010

попробуйте это:

j.ajax({
    url: '/app/save_pomodoro',
    dataType: 'json',
    cache : false,
    success: function() { save_pomodoro_suc() },
    error: function() { save_pomodoro_err() },
    data: {
        bar: 'foo'
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...