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

时间:2011-09-20 21:25:06

标签: asp.net-mvc jquery

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

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

     {

        ....

     });

我是通过位于http://localhost/myapp/home/index

的页面调用的

当我尝试拨打上述电话时​​,会转到:http://localhost/myapp/home/index/home/myInfo

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

我是否必须指定绝对URL?

2 个答案:

答案 0 :(得分:14)

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

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

或者如果这是在一个单独的javascript文件中,你不能使用服务器端助手,那么你可以在一些DOM元素上使用HTML 5 data- *属性你是AJAXifying,就像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" })

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

答案 1 :(得分:0)

您确定已正确复制并粘贴了代码吗?因为你拥有它,所以应该引用http://localhost/home/myInfo。我可以看到它正如你所描述的那样做的唯一原因是你的代码是否使用了这样的相对URL:

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

     {

        ....

     });

否则,如果您真的使用值“/ home / myInfo”而不是“home / myInfo”,那么您已经引用了url的绝对版本(“绝对”url的定义是它启动用“/”)。我运行了一些快速测试,在我的本地机器上,使用“/ home / myInfo”向http://localhost/home/myInfo发出XHR请求