2014-09-05 59 views
0

我有一個大的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); 
    }; 
} 

我用下面的代碼

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

我只需要在我正在處理的頁面中執行getRemoteEndpoint調用之前執行函數。我不想在30個Web服務調用中的每一個之前調用該函數,而是向該函數添加一行代碼。我試圖用以下代替doRemote作業。

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

DoTask是我正在開發的程序中的一個命名函數。雖然它不會引發錯誤,但Ajax調用都不起作用。

我試過使用JQuery.extend函數,但它也沒有工作。

我在做什麼錯?

+1

評論doTask()和嘗試。如果它工作,則DoTask()中有錯誤。我沒有看到任何其他問題 – Sunand 2014-09-05 14:56:51

+0

我看不到任何錯誤。 DoTask()是什麼樣的? – adam0101 2014-09-05 15:13:58

+0

我試着評論這個函數調用,但它不起作用。 DoTask功能已經過測試並且沒有任何錯誤。在編碼和測試之後,我意識到我需要在每個Web服務調用之前調用它。 – 2014-09-05 15:24:43

回答

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); 
    } 
})(); 
+0

就是這樣!謝謝! – 2014-09-05 15:22:29

+0

這是有效的,但並不希望我想要做的。該代碼創建一個閉包,該函數在將函數分配給doRemote後執行一次DoTask()函數。我想要的是每次調用doRemote時啓動DoTask()。 – 2014-09-05 17:12:39

+0

第一個代碼不會創建閉包。查看我的更新。 – Igor 2014-09-05 17:23:40