Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对jQueryAjax对象进行子类化或重用公共回调?_Jquery_Ajax - Fatal编程技术网

如何对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);
    });
}