基本问题是:
有一个带控件的页面调用ajax调用。
ajax调用的网址为var url = 'someAjaxUrl';
我在页面上
mysite.com/bibble/controller/ViewFish
当使用url调用ajax时,它将采用以下方法:
mysite.com/bibble/controller/someAjaxUrl
这很棒。但是,如果我决定将我的ViewFish页面作为控制器的索引,则该URL将变为:
mysite.com/bibble/controller
这打破了ajax,因为ajax现在转到
mysite.com/bibble/someAjaxUrl
是否有一个简单的解决方案可以确保javascript始终有效?
如果您手动输入
mysite.com/bibble/controller/Index
它有效。但这些网址是通过ActionLink()
生成的,会自动为您省略/Index
。
欢迎思考
答案 0 :(得分:4)
欢迎思考
不要硬编码网址:
var url = 'someAjaxUrl';
改为使用内置网址助手:
<script type="text/javascript">
var url = '@Url.Action("someAction", "someController")';
</script>
或者如果您不引人注意地使用某些DOM元素(如锚点或表单)进行AJAX化,则只需使用其href或action属性即可。
例如:
@Html.ActionLink("click me", "someAction", "someController", null, new { id = "myAnchor" })
然后在你单独的javascript中:
$('#myAnchor').click(function() {
$.ajax({
url: this.href,
type: 'GET',
success: function(result) {
}
});
return false;
});
这样您甚至不需要url
变量。您已经将它作为DOM的一部分。
这也适用于div或其他元素:
<div id="myDiv" data-url="@Url.Action("someAction", "someController")">
Click me
</div>
然后:
$('#mydiv').click(function() {
$.ajax({
url: $(this).data('url'),
type: 'GET',
success: function(result) {
}
});
});