在js文件中动态获取基本URL

时间:2010-03-29 17:12:02

标签: c# asp.net javascript

我想在Web服务(.asmx文件)中运行函数

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: '/Admin/WebSrvcs/Management.asmx/f_SearchLabel',
        data: "{_sQuery:'" + obj.value + "'}",
        dataType: "json",

但我不知道我的根网址(http://localhost:4399/VirDir或其他可能的地址)将在js文件中的哪个地址。我需要到达应用程序的根文件夹才能找到asmx文件。

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: 'http://localhost:4399/virDir/Admin/WebSrvcs/Management.asmx/f_SearchLabel',
        data: "{_sQuery:'" + obj.value + "'}",
        dataType: "json",

我正在使用Visual Studio 2008并使用C#构建网站。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

如果您正在使用母版页,那么这就变得很方便了:

在Master Page的HEAD中:

<script type="text/javascript">
    var baseUrl = '<%# ResolveUrl("~/") %>';

    function ResolveUrl(url) {

        if (url.indexOf("~/") == 0) {
            url = baseUrl + url.substring(2);
        }

        return url;
    }

</script>

在Master Page .cs页面中:

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.Header.DataBind();
    }

然后在你的javascript中:

ResolveUrl("~/Admin/WebSrvcs/Management.asmx/f_SearchLabel")

答案 1 :(得分:0)

有一些方法可以做到这一点。

一种方法是迭代页面上的<script>元素并检查src属性是否包含所需的脚本名称(例如<script src="my/js/dir/myScript.js"></script>),然后提取所需的路径。

虽然这可能是一种在其他服务器上移植东西的简单方法,但您可能会遇到“myScript.js”可能在不同位置被多次包含的问题,因此它不会那么可靠。

另一种方法是包含某种配置文件,您可以使用以下内容设置应用程序设置:

文件:app-config.js


var AppConfig = {
    "someImportantPath" : "some/important/path",
    "anotherPath" : "another/path"
}

您可以在整个应用程序中使用此全局变量。

答案 2 :(得分:0)

也许我错过了一些东西,但如果javascript和页面在同一台服务器上,你可以用js来做这样的事情:

<script>
var pd = parent.document;

var location = pd.location.protocol + "//" + pd.location.host;

alert(location);
</script>

此外,您可以为您的javascript编写HTTP处理程序,当请求进入时,您可以通过获取请求的完整URL来填写变量。

internal static string GetFullPath(HttpRequest request)
    {
        Uri uri = request.Url;
        string fullUrl = String.Format("{0}{1}{2}{3}", (request.IsSecureConnection) ? "https://" : "http://",
                                       uri.Host, (uri.IsDefaultPort) ? "" : String.Format(":{0}", uri.Port), uri.AbsolutePath);
        Int32 index = fullUrl.LastIndexOf("/");
        fullUrl = fullUrl.Remove(index + 1, (fullUrl.Length - 1) - index);

        return fullUrl;
    }