2011-06-23 167 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",