如何对jQueryAjax对象进行子类化或重用公共回调?
很抱歉,这个标题模棱两可,但这个问题对我来说很难用语言表达,我似乎只能用代码来描述它 我有以下功能如何对jQueryAjax对象进行子类化或重用公共回调?,jquery,ajax,Jquery,Ajax,很抱歉,这个标题模棱两可,但这个问题对我来说很难用语言表达,我似乎只能用代码来描述它 我有以下功能 function initRPC(procedureName, parameters) { var parcel = //some code that parcels up the procedure name and params $.get( 'url' : 'rpcserver.php', 'data' : parcel,
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
*/
}
);
}
它说的now instance specific code
就是我想要指定代码的地方,并且重用其余的代码,因为initRPC将被频繁调用
例如,我想像这样启动initRPC:
function getUsername()
{
alert('Your name is: ' + initRPC('getUsername', { id: someVar }));
}
function initRPC(procedureName, parameters, callbackFn)
{
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
callbackFn(unparcel);
});
}
或者像这样(在本例中,initRPC命令的签名将扩展为包含传递的函数引用,但我不知道如何将该引用传递给$.post回调:
function getUsername()
{
initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) {
alert('Your name is: ' + data);
});
}
我看不出有什么方法可以实现我所希望的,感觉好像我总是必须重复$.ajax()调用,并在每个函数中展开和包装(如getUsername())
重新表述:如何将数据准备代码、AJAX请求和解包代码封装在一起,然后允许特定于实例的代码在这些代码之后异步运行
[编辑]我现在想到的是在这种情况下重用代码的典型方式如下:
function getUsername()
{
var request = prepareRequest('getUsername', { id: someVar });
$.get(
'url' : 'rpcserver.php',
'data' : request
'success' : function(response) {
response = decodeResponse(response);
/* instance specific code */
}
);
}
也许这是唯一的方法,在我看来,似乎需要在每个函数中重复许多相同的代码,例如
getUsername()
,如果想法是发布回调函数,这相当容易。您可以保留本例中提供的代码:
function getUsername()
{
initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) {
alert('Your name is: ' + data);
});
}
然后像这样写initRPC:
function getUsername()
{
alert('Your name is: ' + initRPC('getUsername', { id: someVar }));
}
function initRPC(procedureName, parameters, callbackFn)
{
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
callbackFn(unparcel);
});
}