嗨,我正在尝试了解 Promise 与 Ajax 调用一起工作的方式。 我想向某个端点发送一个简单的 Ajax 调用,但我真的对代码语法感到困惑。这是我的代码:
该代码的目的是使用户的 session 无效。首先,客户端应向注销端点发送 ajax 调用,提供用户的 token ,然后如果服务器响应成功,我们调用 invalidate() 方法从客户端清除用户数据。
import Ember from 'ember';
export default Ember.Controller.extend({
session: Ember.inject.service('session'),
actions: {
invalidateSession() {
const url = "http://namespace/logout/";
let logoutRequest = new Ember.RSVP.Promise(function(r,e){
r(this.ajax(url, "PUT", {auth_token});)
},
if (logoutRequest) {
this.get('session').invalidate();
}
}
}
});
我知道我的代码不起作用,但我无法将它们组合在一起......
最佳答案
使用ember-ajax这应该有效:
ajax: Ember.inject.service(),
....
actions: {
invalidateSession(){
return this.get('ajax').request('url_goes_here', {
method: 'PUT',
data: {
some: "additional data"
},
}).then(function(success) {
// inform about successful logout, redirect...
}).catch(function(error) {
// handle or throw error
});
}
}
更新:
如果你想将其包裹在 Promise 中,请尝试以下操作: ...
正如@locks提到的,建议使用ember-ajax库而不是使用原始的Ember.$.ajax()
。由于 this.get('ajax').request()
返回一个 Promise,因此不再需要将其包裹在 Promise 中。
但是,如果您只想注销,我建议您查看 ember-simple-auth库(插件)已经解决了您将来可能需要的许多功能(登录、注销、失效、重定向到登录路径...)。
关于javascript - Ember.RSVP.Promise 与 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36617877/