2011-09-20 51 views
5

我試圖讓Ajax調用,像這樣:使用jQuery.get時,我可以指定相對URL嗎?

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

    { 

     .... 

    }); 

我從一個網頁,在調用它:http://localhost/myapp/home/index

當我嘗試作出上述呼籲,它進入:http://localhost/myapp/home/index/home/myInfo

我想它去http://localhost/myapp/home/myInfo

我必須指定絕對URL?

+0

你試過簡單的「myInfo」還是「../myInfo」? –

+0

我試過myInfo然後我得到http:// localhost/myapp/home/index/myinfo –

回答

14

絕對不會在ASP.NET MVC應用程序中像這樣硬編碼URL。使用URL處理時,必須使用網址幫手,就像這樣:

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

或者如果這是在一個單獨的JavaScript文件,你不能使用服務器端的助手,以及例如,你可以使用HTML 5數據 - *在某些屬性DOM元素TAT你AJAXifying,像一個div或東西:

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

然後:

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

,或者如果你是一個AJAXifying形式或錨:

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

,其中當然會都已經生成錨使用助手:

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

看到了嗎?無需硬編碼網址。不要這樣做,因爲它會在你修改Global.asax中的路線模式的第二秒中斷。通過遵循這種技術,您的代碼將完全不受您路線結構變化的影響。

+0

啊是的,我知道必須有更好的方法。謝謝。 –

+3

downvote的任何理由?請在解釋其背後的推理時留下評論。 –

+1

WRT硬編碼網址:OOB幫助程序方法不支持智能感知,這總讓我感到沮喪。 「MyInfo」和「Home」總是魔術字符串。 ReSharper幫助解決這個問題,但仍有潛力讓無限的行動網站 – JoeBrockhaus

0

你確定你已經複製並粘貼了正確的代碼嗎?因爲你有它,應該參考http://localhost/home/myInfo。我可以看到你所描述它這樣做的唯一原因是,如果使用這樣的相對URL代碼爲:

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

    { 

     .... 

    }); 

否則,如果你真正使用值「/家/ MyInfo的」,而不是「 home/myInfo「,你已經在引用url的絕對版本(」絕對「url的定義是以」/「開頭)。我跑了一些快速測試,並在我的本地機器上,使用「/ home/myInfo」產生一個XHR請求http://localhost/home/myInfo

相關問題