通过jQuery.ajax将文件夹路径字符串传递给Web服务功能的问题

时间:2010-04-24 16:55:42

标签: .net asp.net jquery ajax

我需要通过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 \'”。

我怎样才能克服这个?

2 个答案:

答案 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部分。