我很抱歉模棱两可的标题,但这个问题我很难用语言表达,我似乎只能用代码来形容它。
我有以下功能
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 }));
}
或者像这样(在这个例子中,initRPC命令的签名将扩展为包括传递的函数引用,但我不知道如何将该引用传递给$ .post回调:
function getUsername()
{
initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) {
alert('Your name is: ' + data);
});
}
我无法看到一种做我希望的方式,感觉我总是必须重复$ .ajax()调用,并在每个函数中展开和包装(如getUsername())。
重新说明:如何封装数据准备代码,AJAX请求以及将代码展开在一起,然后允许特定代码在此之后运行。异步。
[edit]现在我想到的是在这种情况下重用代码的典型方法如下:
function getUsername()
{
var request = prepareRequest('getUsername', { id: someVar });
$.get(
'url' : 'rpcserver.php',
'data' : request
'success' : function(response) {
response = decodeResponse(response);
/* instance specific code */
}
);
}
也许这是唯一的方法,在我看来要求在每个函数中重复大部分相同的代码,例如getUsername()
答案 0 :(得分:1)
如果想要发布一个回调函数,那就相当容易了。您可以按照此示例中提供的代码保留代码:
function getUsername()
{
initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) {
alert('Your name is: ' + data);
});
}
并像这样写initRPC:
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);
});
}