2014-09-05 2 views
0

몇 가지 Ajax 웹 서비스 호출을하는 대형 JavaScript 프로젝트가 있습니다. 웹 서비스 호출을 처리하는 코드는 공유 외부 파일에서 가져옵니다. 변수에 저장된 함수를 확장하십시오.

그렇게

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'); 
     } 
    }); 
하여 웹 서비스 호출을 호출 다음과 같이 내가 일하고 있어요 하나에 추가됩니다

나는 작업중인 페이지에서만 getRemoteEndpoint 호출을 실행하기 전에 함수를 실행할 필요가있다. 30 가지 웹 서비스 호출 전에 함수를 호출하는 대신 함수에 코드 행을 추가하고 싶습니다. doRemote 할당을 다음으로 대체하려고했습니다.

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

DoTask는 내가 작업하고있는 프로그램에서 이름이 지정된 함수입니다. 오류는 발생하지 않지만 Ajax 호출은 작동하지 않습니다.

JQuery.extend 함수를 사용해 보았지만 작동하지 않았습니다.

내가 뭘 잘못하고 있니?

+1

코멘트 doTask() 시도. 작동하면 DoTask()에 오류가 있습니다. 나는 다른 문제를 보지 않는다 – Sunand

+0

나는 틀린 무엇인가 볼 수 없다. DoTask()는 어떤 모양입니까? – adam0101

+0

함수 호출을 주석 처리하려고 시도했지만 작동하지 않았습니다. DoTask 기능은 이미 테스트되었으며 오류없이 작동합니다. 코딩하고 테스트 한 후에 각 웹 서비스 호출 전에 호출해야한다는 것을 깨달았습니다. –

답변

2

당신은 실제로 doRemote결과를 getRemoteEndpoint을 할당 호출해야 :

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

그게 다야! 감사! –

+0

그게 효과가 있지만,하고 싶지 않아. 이 코드는 doRemote에 함수가 할당되면 DoTask() 함수를 한 번 실행하는 클로저를 만듭니다. 내가 원했던 것은 doRemote가 호출 될 때마다 DoTask()를 시작하는 것이었다. –

+0

첫 번째 코드는 클로저를 만들지 않습니다. 내 업데이트를 참조하십시오. – Igor

관련 문제