2010-04-24 2 views
2

jQuery를 통해 asp.net 웹 서비스 함수 호출을 수행하고 asp.net 응용 프로그램 경로를 전달해야합니다. 그건 내가 (코드 asp.net 페이지, 예를 들어, 영문 파일 내 위치)를 할 노력하고있어 방법 다음을 여기jQuery.ajax를 통해 폴더 경로 문자열을 웹 서비스 함수에 전달하는 데 문제가 있습니다.

protected string GetApplicationPath() 
{ 
    return HttpUtility.HtmlEncode(Request.PhysicalApplicationPath); 
} 

그리고 : 같은 GetApplicationPath 방법은 어떻게 표시되는지를 보여줍니다

var d = "{'str':'<%=System.DateTime.Now.ToString() %>', 'applicationPath':'<%=GetApplicationPath() %>'}"; 

    $.ajax({ type: "POST", 
     url: "http://localhost/testwebsite/TestWebService.asmx/Test", 
     data: d, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     error: function (xhr, status, error) { 
      var err = eval("(" + xhr.responseText + ")"); 
      alert(err.Message); 
     }, 
     success: function (msg) { 

     } 
    }); 

public void Test(string str, string applicationPath) 

함수 호출이 제대로 작동하지만 applicationPath 매개 변수가 올바르게 전달되지 않습니다. 내가 디버깅 할 때 "C : \ Projects \ Samples \ mytestwebsite \"대신 "C : ProjectsSamplesmytestwebsite"라는 함수가 있으면 백 슬래시가 제거 된 것을 볼 수 있습니다.

어떻게 이것을 극복 할 수 있습니까?

답변

3

확인해주세요. 시도해 보았습니다. (은 내 컴퓨터에서 작동합니다.).

protected string GetApplicationPath() 
{ 
    return Request.PhysicalApplicationPath.Replace(@"\", @"\\"); 
} 

다음은 자바 스크립트 항목입니다. 여기서는 JSON JavaScript library을 사용하여 쉽게 이스케이프 처리합니다.

// construct object literal to be JSON-stringified 
var d = { 
    str: "<%=System.DateTime.Now.ToString() %>", 
    applicationPath: "<%=GetApplicationPath() %>" 
}; 

$.ajax({ type: "POST", 
    url: "http://localhost/testwebsite/TestWebService.asmx/Test", 
    data: JSON.stringify(d), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function (xhr, status, error) { 
     var err = eval("(" + xhr.responseText + ")"); 
     alert(err.Message); 
    }, 
    success: function (msg) { 

    } 
}); 
+0

시도했지만 작동하지 않았습니다. –

+0

클래스에 [ScriptService] 특성이 있고 메서드에 [WebMethod] 및 [ScriptMethod (ResponseFormat = ResponseFormat.Json)]이 있는지 확인하십시오. – Craig

+0

아마도 HttpUtility.HtmlEncode (...)가 문제입니다. – Craig

1

JavaScript에서는 역 슬래시를 이스케이프 처리해야합니다. 이중 백 슬래시 "\"\ "\"(마이너스 공간)의로 교체하고 시도 :

protected string GetApplicationPath() 
{ 
    return Request.PhysicalApplicationPath.Replace("\", "\\"); 
} 

난 당신이있는 HTMLEncode 부분을 필요가 있다고 생각하지 않습니다.

+0

C에서 \를 이스케이프해야합니다. 이것을 위해 C# 축 어적 문자열을 사용하는 것이 가장 좋습니다. @ "\"와 @ "\\". – Craig

+0

잘 잡으세요! 나는 그것을 완전히 놓쳤다. – BradBrening

관련 문제