JSFiddle在这里:http: //jsfiddle.net/sandalsoft/eU8ua/
我的应用程序对 instagram 进行 ajax 调用以获取用户的 instagram 提要,并在用户没有会话时重定向以进行身份验证。Instagram 在access_token
无效时返回 HTTP 400,我想根据该 400 状态代码进行重定向。但是当 $.ajax() 返回 400 响应时,它并没有被events:
路由中的钩子处理。我在setupController()
处理它的方法中有代码,但感觉不对。
events:
处理这些 HTTP 代码和放置重定向/转换逻辑的正确位置是否正确?如果是这样,有什么想法为什么它不起作用?如果没有,是否有更好的方法来完成我正在尝试做的事情。
App = Ember.Application.create();
App.Router.map(function() {
this.resource("instagram");
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('instagram');
}
});
App.InstagramRoute = Ember.Route.extend({
events: {
error: function(reason, transition) {
console.log('err. reason.status: ' + reason.status);
if (reason.status === 400) {
console.log('in evetns hook. Unauthorized, redirecting to: ' + App.Instagram.authURL);
this.transitionTo(App.Instagram.authURL);
} else {
console.log('err. reason.status: ' + reason.status);
}
}
},
setupController: function(controller) {
$.ajax({
url:"https://api.instagram.com/v1/users/1574083/?access_token=NO_TOKEN",
type:'GET',
dataType:'JSONP',
}).then(function(json){
if (json.meta.code ===400) {
console.log('in setupController ERROR 400: json: ' + JSON.stringify(json));
}
else {
controller.set('model', json.data);
}
});
}
});
App.Instagram = Em.Object.extend({
});
App.Instagram.reopenClass ({
authURL: 'https://instagram.com/oauth/authorize/?client_id=' + App.Instagram.clientId + '&redirect_uri=' + App.Instagram.redirectUri + '&response_type=token',
token: localStorage.Instagram_token,
tokenChanged: function() {
localStorage.token = this.get('Instagram_token');
}.observes('token')
});
更新:instagram 网络服务器返回 HTTP 200,但响应 JSON 错误代码是 400。所以我可以看到events:
钩子可能不会触发,但在我的 setupController 中处理所有 4xx 应用程序错误代码是否仍然合适( ) 方法?