Tôi có trang web này kết nối với một dịch vụ địa phương quản lý một CardReader với một PIN Pad. Có nhiều thao tác khác nhau có thể được hoàn thành bằng thiết bị này. Heres một ví dụ về một trong số họ:Cách quản lý các cuộc gọi AJAX bị xích với jQuery
- Khóa điện thoại
- Hỏi mã PIN số
- thiết bị phát hành
Trước khi tôi sử dụng để chuỗi các callbacks giữa mỗi khác, nhưng bây giờ, bởi vì có các hoạt động mới, cũng sử dụng các phương pháp như "khóa" và "giải phóng", tôi cần thay đổi mã của mình, để mã cho bước 1 và 3 có thể sử dụng lại được.
Tôi đã cố gắng giải quyết vấn đề này với lời hứa của jQuery, nhưng Im khá mới mẻ với điều này, và tôi vẫn chưa thực sự tìm ra cách chúng hoạt động. Ai đó có thể cho tôi một tay không?
Đây là ví dụ về mã đang sử dụng ngay bây giờ. Tôi đã xóa logic nghiệp vụ khỏi bên trong các chức năng, để đơn giản hóa ví dụ:
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
});
}
};