【发布时间】:2013-07-23 08:44:43
【问题描述】:
我有这个网站,该网站连接到本地服务,该服务管理带有密码键盘的读卡器。使用此设备可以完成许多不同的操作。以下是其中之一的示例:
- 锁定设备
- 询问 PIN 码
- 释放设备
以前我是把回调链接在一起,但是现在,因为有新的操作,也使用了像“lock”和“release”这样的方法,我需要改变我的代码,以便第1步的代码并且 3 是可重复使用的。
我一直在尝试使用 jQuery Promise 来解决这个问题,但我对此很陌生,我还没有真正弄清楚它们是如何工作的。有人可以帮帮我吗?
这是我现在使用的代码示例。我已经从函数内部删除了业务逻辑,以简化示例:
var CardReader = {
////////////////////
// Different possible messages to the Card Reader
////////////////////
lockDevice: function() {
this.makeAjaxCall("GET", "/LockDevice", this.lockDeviceCallback);
},
getPin: function() {
this.makeAjaxCall("POST", "/getPin", this.getPinCallback);
},
releaseDevice: function() {
this.makeAjaxCall("POST", "/Release", this.releaseDeviceCallback);
},
//////////////////
// Callbacks for each message to the Card Reader
//////////////////
lockDeviceCallback: function(jqXHR, textStatus) {
if (textStatus !== "success") { return; }
this.getCardLogin();
},
getCardLoginCallback: function(jqXHR, textStatus) {
if (textStatus !== "success") { return; }
this.releaseDevice();
},
releaseDeviceCallback: function(jqXHR, textStatus) {
if (textStatus !== "success") { return; }
//End
},
////////////////
// Other methods
////////////////
init: function() {
// UI BIndings
$(#button).on("click", this.logIn.bind(this));
},
logIn: function() {
this.lockDevice();
},
makeAjaxCall: function(callType, resource, callbackMethod) {
$.ajax({
type : callType,
url : "http://localhost:1337" + resource,
cache : false,
dataType : "json",
contentType: "application/json",
context : this,
complete : callbackMethod
});
}
};
【问题讨论】:
标签: jquery ajax asynchronous callback promise