0

我在我的代码中使用 ajax。我必须从 $('SyncDataPort0') 调用 connectHost() 到 $('SyncDataPort5'),

function connectHost()
{
    ajaxFrame($('SyncDataPort0').value, getConnectStatus);
}

function getConnectStatus(transport) 
{
    try {
        rs = transport.responseText;
        if(rs == 'OK') {
            //$('SyncDataState0').innerHTML = 'ok';
            addStateMsg($('ConnectTest'),getMsg('msgConnectOk'));
        } else //NOT OK

        addStateMsg($('ConnectTest'),getMsg('msgConnectNotOkResult').replace('%s',rs));
    }catch(e){alert(e)};
}

function ajaxFrame(url, pars, onCompleteFun)
{
if (3 in arguments)
    addStateMsg(arguments[3],getMsg('msgDataSending'),0);

new Ajax.Request(url,
{
    method:'post',
    parameters:pars,
    onComplete: function(transport)
    {
        var rs = transport.responseText;
        if('logout' == rs)
            location.href='/index.php?menu=logout';
        else if('' == rs)
        {
            //do nothing
        }else
            onCompleteFun.apply(this,[transport]);
    },
    onFailure:function()
    {
        debug('Load Data Failure!');
    }
});
return true;
}

问题是如何在不复制 getConnectStatus 回调函数的情况下实现该函数???

4

1 回答 1

1

如果您使用内联函数声明,您可以引用父作用域中的变量,并且可以将端口传递给您的connectHost()函数。

function connectHost(portNum)
{
    ajaxFrame($('SyncDataPort' + portNum).value, function(transport) {
        // you can refer to portNum here in the callback
        try {
            rs = transport.responseText;
            if(rs == 'OK') {
                //$('SyncDataState0').innerHTML = 'ok';
                addStateMsg($('ConnectTest'),getMsg('msgConnectOk'));
            } else //NOT OK

            addStateMsg($('ConnectTest'),getMsg('msgConnectNotOkResult').replace('%s',rs));
        } catch(e) {alert(e)};
    });
}

如果你想getConnectStatus()仍然是它自己的函数,那么你可以使用这样的内联存根函数:

function connectHost(portNum)
{
    ajaxFrame($('SyncDataPort' + portNum).value, function(transport) {
        getConnectStatus(transport, portNum);
    });
}

并将getConnectStatus()作为portNum第二个参数。您可以通过这种方式将任意数量的参数传递给回调。


如果getConnectStatus()需要this保留的值,那么您可以这样做:

function connectHost(portNum)
{
    ajaxFrame($('SyncDataPort' + portNum).value, function(transport) {
        getConnectStatus.call(this, transport, portNum);
    });
}
于 2013-11-12T07:08:02.420 回答