我有返回JSON数据的ASP.NET MVC操作。我的客户端使用jQuery的ajax
函数来检索这些数据并将其显示在屏幕上。我在JavaScript中使用控制器操作的绝对路径:
$.ajax({
url: '/Home/Load',
type: 'post',
dataType: 'json'
})
问题是在某些环境中,我们会在前面添加一个额外的虚拟目录,因此URL实际上是/Path/To/App/Home/Load
。我想知道是否有办法编写我的JavaScript,以便每次部署时都不需要更新。我可以使用相对网址,例如../Home/Index
,但偶尔会移动我的JavaScript代码。使用MVC的捆绑器时,事情变得更加棘手。如果~
角色有效,那就太好了。
答案 0 :(得分:4)
我是这样做的:
在主视图中添加以下行(此处使用Razor语法):
<script type="text/javascript">
var appBaseUrl = "@Url.Content("~")";
</script>
然后在Javascript中:
$.ajax({
url: appBaseUrl + 'Home/Load',
type: 'post',
dataType: 'json'
})
答案 1 :(得分:2)
您可以将URL放入与您的ajax请求相关的元素中:
<div id="mydiv" data-url="@Url.Action("Load", "Home")">Click me to load ajax request!</div>
然后将您的JS代码更改为:
$.ajax({
url: $('mydiv').data('url'), // Could be $(this).data('url') if clicking to load
type: 'post',
dataType: 'json'
})
这样做的好处是它仍然使用MVC路由,因此任何自定义路由仍然有效。