我有一个大型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函数,但它也没有用。
我做错了什么?
答案 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);
}
})();