如何将同步 ajax 调用替换为凭据以保持应用状态稳定
How can I replace a sync ajax call with credentials to keep my app's state stable
我知道Firefox和jQuery不允许使用凭据的同步请求。我的问题是我需要知道用户是否已登录(通过点击/echo 端点来检查他在服务器上的会话(。
否则,我的主干应用程序将进入错误状态,因为当我导航到像 #newActivity 这样的主干路由时,我的控制器中有以下逻辑:
if (Session.status!=Session.LOGGED_IN) {
Backbone.history.navigate('login', true);
return;
}
会话是一个单一实例对象。在那里,如果我点击异步/echo 端点,直到调用成功时,我的控制器已经认为我们没有登录。结果:当用户刷新页面时,他总是在登录提示中被重定向。
如果我发出请求同步,Chrome 一切正常。
请求是:
$.ajax({
url: Config.serverUrl + "/rest/auth/echo",
type: 'GET',
dataType: "json",
async:false,
xhrFields: {
withCredentials: true
},
/* beforeSend: function(xhr) {
xhr.withCredentials = true;
},*/
crossDomain: true,
success: function (data) {
self.bootstrap(data)
self.globalCh.vent.trigger('loggedIn',data.username);
}
});
我有点理解他们为什么要逐步淘汰同步查询,但有时它们是没有不稳定的应用程序状态所必需的。
关于更好的实施的任何解决方法或想法?
你需要
使用承诺和/或延迟对象。http://api.jquery.com/category/deferred-object/
jQuery的AJAX调用返回一个promise。这意味着当 ajax 调用完成时,您可以在任何您想要的位置触发回调。
向 AJAX 请求添加return
。
function getLoginInformation() {
return $.ajax({
// your ajax call to check if the user is logged in or not
});
}
然后在页面加载时,您在拥有登录信息后触发需要登录信息的内容。喜欢这个:
getLoginInformation().then(function(data) {
// load the app and everything else that needs credentials
});
相关文章:
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Web应用程序,将成员状态更新为其他成员
- 在通知点击时使用Ion中的OneSignal插件路由到应用程序中的状态
- 使用应用程序状态js和视图在angular js url上传递两个参数
- 来自应用程序状态的Jquery数据表源
- 检测Ionic中特定的应用程序状态变化
- 在基于Strophe.js的聊天应用程序中处理状态
- 如何保持JavaScript web应用程序的状态
- 在angular js中,每次应用程序进入状态时,重新加载状态的最佳方式是什么
- 在用于SEO的Marionette应用程序中使用推送状态
- 使用AsyncStorage实例化持久应用程序状态
- 如何在React应用程序中处理权限检查(Redux中的状态维护)
- 如何在类似Om的不可变应用程序状态下对关系数据进行建模
- 如何在AngularJS$rootScope事件侦听器中应用状态转换
- 我如何才能进入一个完整的角度状态应用程序
- Chrome应用程序:无法检索文件加载状态
- 刷新子组件更改时的应用状态
- 如何在 ThreeJS 中应用矩阵转换并将结果设置为默认状态
- 如何将同步 ajax 调用替换为凭据以保持应用状态稳定
- 如何响应应用状态更改?(反应原生)