使用jQuery.get时可以指定相对URL吗?

dev*_*per 5 asp.net-mvc jquery

我正试图像这样进行ajax调用:

 $.get('/home/myInfo', function (data)

     {

        ....

     });
Run Code Online (Sandbox Code Playgroud)

我是从以下页面调用它:http:// localhost/myapp/home/index

当我尝试进行上述调用时,它会转到:http:// localhost/myapp/home/index/home/myInfo

我希望它转到http:// localhost/myapp/home/myInfo

我必须指定绝对URL吗?

Dar*_*rov 14

绝对不会在ASP.NET MVC应用程序中硬编码这样的URL.在处理网址时始终使用网址助手,如下所示:

$.get('@Url.Action("MyInfo", "Home")', function (data) {
    ....
});
Run Code Online (Sandbox Code Playgroud)

或者,如果这是在一个单独的javascript文件中,你不能使用服务器端帮助程序,那么你可以在一些DOM元素上使用HTML 5 data-*属性你是AJAXifying,比如div或者其他东西:

<div id="mydiv" data-url="@Url.Action("MyInfo", "Home")">Click me</div>
Run Code Online (Sandbox Code Playgroud)

然后:

$('#mydiv').click(function() {
    $.get($(this).data('url'), function (data) {
        ....
    });
});
Run Code Online (Sandbox Code Playgroud)

或者如果您是AJAX化表单或锚点:

$('#myanchor').click(function() {
    $.get(this.href, function (data) {
        ....
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

锚点当然是使用助手生成的:

@Html.ActionLink("click me", "MyInfo", "Home", null, new { id = "myanchor" })
Run Code Online (Sandbox Code Playgroud)

看到?无需硬编码网址.不要这样做,因为它会在您修改路线模式的第二步中断Global.asax.通过遵循这种技术,您的代码将完全与路由结构的任何变化无关.

  • downvote的任何理由?请在downvoting解释其背后的原因时发表评论. (3认同)