2011-06-23 101 views
3

我的頁面是domain.com/home/details/1ASP.Net MVC的路由問題jQuery的AJAX

在我的jQuery AJAX調用我見然而下面這讓調用它的製作域呼叫時。 com/home/details/home/getdata

我該怎麼做才能正確解決問題?

$(document).ready(function() { 

      oTable = $('#example').dataTable({ 
       "bServerSide": true, 
       "sAjaxSource": "Home/GetData/", 
       "bProcessing": true, 
       "bPaginate": true, 
       "sPaginationType": "full_numbers", 
       "bFilter": true, 
       "bAutoWidth": false, 
       "fnServerData": function (sSource, aoData, fnCallback) { 
        /* Add some extra data to the sender */ 
        //aoData.push({ "filtervalue": $('#filtervalue').val(), "Options": $('#Options').val() }); 
        $.getJSON(sSource, aoData.concat($('form').serializeArray()), function (json) { 
         /* Do whatever additional processing you want on the callback, then tell DataTables */ 
         fnCallback(json) 
        }); 
       } 
      }); 

     }); 

回答

17

絕對總是在網址打交道時使用的網址助手ASP.NET MVC。絕對是從來沒有 hardcode網址,因爲你做到了。

所以:

"sAjaxSource": "@Url.Action("GetData", "Home")" 

,如果這是在一個單獨的JavaScript文件,你可以使用HTML5的#exampledata-*屬性:

<div id="example" data-url="@Url.Action("GetData", "Home")"> 
    ... 
</div> 

,然後在不同的JS,你可以使用.data()方法:

"sAjaxSource": $('#example').data('url') 
+2

+1表示助手。如果您在虛擬目錄(例如http://domain.com/myapp/)中部署應用程序,則使用'/ Home/GetData'將不起作用。 –

+0

建議總是使用URL幫助器,永遠不要硬編碼URL。 – IAbstract

0

您是否嘗試在Ajax Source之前放置一個前導斜槓?

"sAjaxSource": "/Home/GetData/" 

UPDATE

正如下面的評論說,硬編碼URL可以在以後的路線會產生問題。

Darin已經發布了關於使用內置的URL助手,所以我不會編輯我的帖子來包含該信息。我做一個稍微不同的方式記錄在這裏:

Create Extension methods of UrlHelper to generate your url from Route

我找到工作了前端團隊工作時是非常有幫助的這種方式。他們發現很容易理解Url.RequestedPage()格式,這意味着他們每次想要鏈接或請求時都不需要我的幫助。

+0

上帝該死的。我以爲我試過每一個場景都不是那個!謝謝 – Jon

+0

很高興它爲你工作喬恩。 –

+2

-1,用於硬編碼網址,而不是使用Url heleprs。只要在IIS中的虛擬目錄中部署應用程序,就會中斷。 –

0

我覺得你的路徑應該是

"sAjaxSource": "/home/details/home/getdata", 

,不應該getdata像訪問getdata.php什麼文件名

"sAjaxSource": "/home/details/home/getdata.php",