扩展存储在变量中的函数

时间:2014-09-05 14:51:05

标签: javascript jquery

我有一个大型JavaScript项目,可以进行多次Ajax Web服务调用。处理Web服务调用的代码来自共享的外部文件。

要将Web服务与调用代码分开,有一个全局对象可以像这样引用调用函数

var doRemote ={};
$(document).ready(function(){
doRemote =getRemoteEndpoint('https://someplace.org/MyWebService.aspx');
}

getRemoteEndpoint的简化版本,除了我正在处理的其他页面之外,还存放在一个文件中,如下所示:

function getRemoteEndpoint(url) {
    return function(methodName, options) {
        var extension = {
            url: url + '/' + methodName,
            data: {},
            async: true

        };

        var combined = $.extend({}, extension, options);
        combined.data = JSON.stringify(combined.data);
        return $.ajax( combined );
    };
}

我通过以下代码调用Web服务调用

doRemote('WebServiceMethodName', 
    {
        success: function(data) {
            alert('Web Service Returned' + data);
        },
        error: function(req, stat, err) {
            alert('Error');
        }
    });

我只需要在我正在处理的页面中执行getRemoteEndpoint调用之前执行一个函数。我不想在每次30个Web服务调用之前调用该函数,而是想在函数中添加一行代码。我尝试用以下内容替换doRemote作业。

doRemote =function() {
                DoTask();
                return getRemoteEndpoint('https://someplace.org/MyWebService.aspx');
    };

DoTask是我正在开发的程序中的一个命名函数。虽然它没有抛出任何错误,但没有一个Ajax调用工作。

我尝试使用JQuery.extend函数,但它也没有用。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您必须实际调用它以将getRemoteEndpoint结果分配给doRemote

doRemote = (function() {
    DoTask();
    return getRemoteEndpoint('https://someplace.org/MyWebService.aspx');
})();

更新

doRemote = (function() {
    var oldDoRemote = getRemoteEndpoint('https://someplace.org/MyWebService.aspx');
    return function(a1, a2) {
      DoTask();
      oldDoRemote(a1, a2);
    }
})();