Ho questo sito Web che si collega con un servizio locale che gestisce un CardReader con un Pad PIN. Ci sono molte diverse operazioni che possono essere completate usando questo dispositivo. Ecco un esempio di uno di loro:Come gestire le chiamate AJAX concatenate con jQuery
- bloccare il dispositivo
- chiedere il numero di PIN
- dispositivo di uscita
Prima ho usato per la catena i richiami tra l'altro, ma ora, a causa ci sono nuove operazioni, che usano anche metodi come "lock" e "release", ho bisogno di cambiare il mio codice, in modo che il codice per i passaggi 1 e 3 sia riutilizzabile.
Ho cercato di risolvere questo con promesse di jQuery, ma Im abbastanza nuovo a questo, e ho ancora havent davvero capito come funzionano. Qualcuno può darmi una mano?
Questo è un esempio del codice che sto usando ora. Ho rimosso la logica di business dall'interno delle funzioni, per semplificare l'esempio:
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
});
}
};