动态获取JS文件内的基本URL

3
我想在Web服务(.asmx文件)内运行函数。
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: '/Admin/WebSrvcs/Management.asmx/f_SearchLabel',
        data: "{_sQuery:'" + obj.value + "'}",
        dataType: "json",

但我不知道我的根URL将在哪里(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#构建网站。

非常感谢您的任何帮助。


从根目录开始,就像您在第一个示例中所做的那样,就足以访问Web服务了,为什么要使用绝对URL而不是相对URL呢? - Joop
在我的电脑上,我正在使用http://localhost:4399/virDir URL进行工作。但是当我将Web应用程序发布到服务器时,我无法访问JS文件。 - uzay95
3个回答

1
如果您正在使用主页,则这将变得非常方便:
在主页的HEAD中:
<script type="text/javascript">
    var baseUrl = '<%# ResolveUrl("~/") %>';

    function ResolveUrl(url) {

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

        return url;
    }

</script>

在主页面的.cs页面中:
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.Header.DataBind();
    }

然后在你的JavaScript中:

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

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"
}

然后你可以在整个应用程序中使用这个全局变量。


你说得没错,但我正在我的机器上使用这个基本URL:http://localhost:4399/myVirDir/... 但是当我将这个网站发布到服务器上时,它的基本地址会更改为http://www.hostname.com/theirVirDir。 - uzay95

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;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接