在我的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方法
您有两个选择:
-
在JavaScript中构建配置/首选项对象,该对象包含所有特定于环境的设置:
var配置={ base:<;%%/*但是,你在ASPX*/%>;中输出的东西;, 其他人:4 };然后在AJAX url前面加上
config.base(并更改config.base的值,无论您是否在开发/测试/部署服务器上) -
使用
<;基本/>HTML标记,为所有相对URL设置URL前缀。这会影响所有相关URL:图像、链接等
就个人而言,我会选择选项1。您很可能会发现这个配置对象在其他地方派上了用场
显然,配置对象必须包含在站点的服务器端代码评估部分中;如果不配置服务器,.js文件将无法剪切它。我总是在HTML中包含config对象<;头>;它是一个很小的配置对象,每个页面上的内容都可以更改,所以最好将它放在其中