我需要通过jQuery执行asp.net web-service函数调用并将asp.net应用程序路径传递给它。这就是我尝试这样做的方式(代码位于asp.net页面中,例如aspx文件):
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) {
}
});
这就是GetApplicationPath方法的样子:
protected string GetApplicationPath()
{
return HttpUtility.HtmlEncode(Request.PhysicalApplicationPath);
}
这是我正在尝试调用的Web服务函数的标题:
public void Test(string str, string applicationPath)
函数调用效果很好,但是applicationPath参数没有正确传递。当我调试它时,我看到反斜杠被删除,函数获取“C:ProjectsSamplesmytestwebsite”而不是“'C:\ Projects \ Samples \ mytestwebsite \'”。
我怎样才能克服这个?
答案 0 :(得分:3)
好的,试一试,我试了一下(在我的机器上工作)。
protected string GetApplicationPath()
{
return Request.PhysicalApplicationPath.Replace(@"\", @"\\");
}
然后为javascript的东西。在这里,我使用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) {
}
});
答案 1 :(得分:1)
需要在JavaScript中转义反斜杠。尝试用双反斜杠替换“\”“\ \”(减去空格):
protected string GetApplicationPath()
{
return Request.PhysicalApplicationPath.Replace("\", "\\");
}
我认为你不需要HTMLEncode部分。