2011-05-04 2 views
4

에 내가 jQuery를 사용하여 [WebMethod] 특성으로 표시된 해당 페이지 내부의 메소드를 호출하고 싶습니다 MS 셰어 포인트 2010페이지 방법은 jQuery를에서 셰어

_LAYOUTS 폴더에 배포 된 응용 프로그램 페이지 (영문)가 호출합니다. 나는 document.ready()에 다음 코드를 사용하고 있습니다 :이 코드는 불행히도 작동하지 않습니다

$("#btnOk").click(function() { 
    var theUrl = '/_layouts/MyProject/MyPage.aspx/MyMethod'; 
    $.ajax({ 
     type: "get", 
     dataType: "json", 
     url: theUrl, 
     data: {}, 
     success: function (response) { 
      [...] 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      [...] 
     } 
    }); 
}); 

. URL에 문제가 있습니다. 실제로 이런 절대 URL을 사용하면 작동합니다.

var theUrl = 'http://server/sites/xxx/_layouts/MyProject/MyPage.aspx/MyMethod'; 

절대 경로로 절대 경로를 변환하려면 어떻게해야합니까? 문제가있다

http://server/_layouts/MyProject/MyPage.aspx/MyMethod 

: 귀하의 예제에서

+0

[PageMethods vs UpdatePanels] (http://izlooite.blogspot.com/2010/06/pagemethods-vs-updatepanels.html) –

답변

6
/_layouts/MyProject/MyPage.aspx/MyMethod 

은 동일합니다. /로 시작하는 수단은 루트에서 시작합니다. 이것을 조정해야합니다. 그것이 여러 장소에서 사용될 수 있기 때문에 어떻게 든 동적 이어야만한다면, 코드 숨김을 사용하여 경로 등을 주입해야 할 수도 있습니다. 이것이 항상 정적 인 장소에서 실행되는 경우 URL을 수정하면됩니다. 예를 들어 당신이에서를 실행하는 페이지 인 경우

:

http://server/sites/xxx/Somepage.aspx 

은 그럼 그냥 아무 슬래시로

_layouts/MyProject/MyPage.aspx/MyMethod 

로 변경. 예를 들어 당신이 하위 폴더에있는 경우

:

http://server/sites/xxx/Pages/Somepage.aspx 

다음이 작업을 수행 할 수 있습니다

../_layouts/MyProject/MyPage.aspx/MyMethod 

에 .. 하나 개의 폴더를 당신을 걸릴 것입니다.

+0

답변 해 주셔서 감사합니다. 사실 당신이 말한 것은 정확하지만 내 경우에는 불행히도 적용되지 않습니다. 사실 이미 알고 있듯이 layouts 디렉토리는 SharePoint의 모든 웹 사이트에 매핑되는 가상 디렉토리입니다. 또한 내 사이트는 루트 경로로 정확히 [http : // server/sites/xxx] (http : // server/sites/xxx) 사이트 모음입니다. 그래서'/'로 시작할 때 올바르게 사용하고 있습니다. – Lorenzo

+0

결과로 얻으려는 URL이'http : // server/sites/xxx/_Layouts ...'또는'http : // server/_Layouts'입니다. 그것이 전자라면 나는 나의 대답이 유효하다고 믿는다. 이를 테스트하려면 ajax를 전달하는 것과 동일한 경로로가는 간단한 링크를 만들고 주소 표시 줄에서 어떤 URL이 끝나는 지 확인하십시오.이 URL도 AJAX가 해결할 URL입니다. 나는이 URL에 대한 수정이 필요할 수도 있다고 생각합니다. 몇 가지 가정을하고'../'등과 같은 것을 사용할 수 있는지 또는 javascript 나 codebehind와 좀 더 복잡한 작업을 수행하여 적절한 사이트 루트를 얻을 수 있는지 여부. –

+1

URL의 첫 번째 부분 ('http : // server/sites/xxx')을 제공하는'<% = SPContext.Current.Site.Url %> '을 사용하여 해결했습니다. 어쨌든 도와 주셔서 감사합니다 :) – Lorenzo