Je suis désolé pour le titre ambigu, mais cette question est difficile pour moi de mettre en mots, je peux seulement sembler le décrire avec du code.Comment sous-classer l'objet ajax jQuery ou réutiliser un rappel commun?
J'ai la fonction suivante
function initRPC(procedureName, parameters)
{
var parcel = //some code that parcels up the procedure name and params
$.get(
'url' : 'rpcserver.php',
'data' : parcel,
'success' : function(returnXML) {
unparcel = //some code to unwrap the returned data
/**
* now instance specific code
*/
}
);
}
Lorsqu'il dit now instance specific code
est où je veux code spécifique, et de réutiliser le reste comme initRPC sera appelé fréquemment.
Par exemple, je voudrais lancer la initRPC comme ceci:
function getUsername()
{
alert('Your name is: ' + initRPC('getUsername', { id: someVar }));
}
ou comme celui-ci (dans cet exemple, la signature de la commande initRPC étendrait à inclure la référence de fonction passée, mais je n » t savoir comment transmettre cette référence au rappel .post $:
function getUsername()
{
initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) {
alert('Your name is: ' + data);
});
}
Je ne vois pas une façon de faire ce que je l'espérais, on dirait que je vais devoir toujours répéter l'appel .ajax $() avec déballer et encapsuler dans chaque fonction (comme getUsername()).
Rephrased: comment j'encapsule le code de préparation de données, la requête AJAX et le code de déballage ensemble, puis autorise par exemple l'exécution d'un code spécifique après ceux-ci. Asynchronously.
[modifier] L'idée de venir me est maintenant la façon typique de réutilisation du code dans cette situation est la suivante:
function getUsername()
{
var request = prepareRequest('getUsername', { id: someVar });
$.get(
'url' : 'rpcserver.php',
'data' : request
'success' : function(response) {
response = decodeResponse(response);
/* instance specific code */
}
);
}
Peut-être est la seule façon, il me semble juste d'exiger de répéter beaucoup du même code dans chaque fonction comme getUsername()