2012-04-20 2 views
1

В конце концов, я хочу, чтобы поймать ошибку 302 и перенаправлять на мою страницу входа в систему, но сейчас xhr.status получает код статуса 200.backbone.sync получить все коды состояния ошибки ответа

Вот мой текущий код:

parentSyncMethod = Backbone.sync 
Backbone.sync = (method, model, options) -> 
    old_error = options.old_error 
    options.error = (xhr, text_status, error_thrown) -> 
    if(xhr.status == 302) 
     window.location.replace('http://localhost:8080/login') 
    else 
     old_error?(xhr, text_status, error_thrown) 
    parentSyncMethod(method, model, options) 

в основном я думаю, что проблема в том, что текущая странице бросает ошибку 200, но один, который бросает 302 обернут и не распространяющуюся на xhr.status. Есть ли способ получить ответы на все коды статуса из всех полученных запросов на получение, пост, пометку и т. Д.?

+0

Проголосовали за переопределение синхронизации :) – lucke84

ответ

5

302 кода ответа автоматически перенаправляются браузером, поэтому вы не сможете поймать этот ответ. Ваш обработчик будет запускаться только после того, как данные вернутся с URL-адреса, на который были перенаправлены.

Я бы сказал, что вместо того, чтобы использовать здесь 302, вам, вероятно, нужно просто вернуть 200 и передать сигнал ответа редиректа по-своему.

+0

, но нет никакого браузера, отлавливающего этот ответ, это jQuery.ajax, который кэширует его .. кто является тем, кто управляет перенаправлением? – fguillen

+0

@fguillen 302 перенаправления обрабатываются прозрачно, поэтому вы никогда не увидите ответ. jQuery вызывает функции браузера для выполнения запроса. Когда ответ вернется, браузер увидит статус 302, заглянет в заголовок «Местоположение» и начнет новый запрос на этот URL. Когда этот запрос вернется, он запустит ваш обработчик. – loganfsmyth

+0

Я вижу .. спасибо за объяснение – fguillen