如何在Javascript中获取相对路径?

在我的ASP.net web项目中,我在.js文件中编写了以下Javascript代码:

函数getDeviceTypes(){
var设备类型;
$.ajax({
async:false,
类型:“POST”,
url:“Controls/ModelSelectorWebMethods.aspx/getDeviceTypes”,
数据:“{}”,
contentType:“应用程序/json;”,
数据类型:“json”,
成功:功能(响应){
deviceTypes=response.d;
},
错误:函数(xhr,状态){
调试器;
警报(’获取设备类型时出错’);
}
});//end-$.ajax
返回设备类型;
}

在我尝试将这个.js文件加载到子目录中的页面之前,它一直工作得很好

让我们假设我的项目的名称是widget

当我在主虚拟目录中使用此代码时,Javascript将Controls/ModelSelectorWebMethods.aspx/getDeviceTypes解释为https://mysite.com/widget/Controls/ModelSelectorWebMethods.aspx/getDeviceTypes一切都很好。但是,从子目录中的页面,Javascript将其解释为https://mysite.com/widget/subdirectory/Controls/ModelSelectorWebMethods.aspx/getDeviceTypes但它不起作用

如何编写Javascript代码,以便可以从应用程序中任何目录中的页面调用AJAX web方法

您有两个选择:

  1. 在JavaScript中构建配置/首选项对象,该对象包含所有特定于环境的设置:

    var配置={
    base:<%%/*但是,你在ASPX*/%>中输出的东西;,
    其他人:4
    };
    

    然后在AJAX url前面加上config.base(并更改config.base的值,无论您是否在开发/测试/部署服务器上)

  2. 使用<基本/&gtHTML标记,为所有相对URL设置URL前缀。这会影响所有相关URL:图像、链接等

就个人而言,我会选择选项1。您很可能会发现这个配置对象在其他地方派上了用场

显然,配置对象必须包含在站点的服务器端代码评估部分中;如果不配置服务器,.js文件将无法剪切它。我总是在HTML中包含config对象<头>它是一个很小的配置对象,每个页面上的内容都可以更改,所以最好将它放在其中

发表评论