如何简化我的javascript代码(ajax)

时间:2013-11-12 06:51:13

标签: javascript ajax

我在代码中使用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的情况下实现该功能 回调函数???

1 个答案:

答案 0 :(得分: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);
    });
}