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



我想做一个ajax调用,像这样:

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

我从一个页面调用它,这个页面是:http://localhost/myapp/home/index

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

我想让它转到http://localhost/myapp/home/myInfo

我必须指定绝对URL吗?

绝对不要在ASP中硬编码这样的url。NET MVC应用程序。在处理URL时总是使用URL帮助器,像这样:

$.get('@Url.Action("MyInfo", "Home")', function (data) {
    ....
});

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

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

然后:

$('#mydiv').click(function() {
    $.get($(this).data('url'), function (data) {
        ....
    });
});

或者如果你正在ajax窗体或锚:

$('#myanchor').click(function() {
    $.get(this.href, function (data) {
        ....
    });
    return false;
});

,其中锚当然是使用帮助程序生成的:

@Html.ActionLink("click me", "MyInfo", "Home", null, new { id = "myanchor" })
看到了

?不需要硬编码url。不要这样做,因为它会在你修改Global.asax中路由模式的那一刻破裂。通过使用这种技术,你的代码将完全不知道路由结构的任何变化。

您确定复制并粘贴了正确的代码吗?因为当你有它时,它应该引用http://localhost/home/myInfo。我能看到它像你描述的那样做的唯一原因是如果你的代码使用了一个像这样的相对url:

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

否则,如果你真的使用值"/home/myInfo"而不是"home/myInfo",你已经引用了url的绝对版本("绝对" url的定义是以"/"开头)。我运行了一些快速测试,在我的本地机器上,使用"/home/myInfo"会产生一个XHR请求http://localhost/home/myInfo