2015-10-27 83 views
0

我刚把所有jQuery POST都移到了外部文件中。所以我改变Url.Action到实际的URL:jQuery POST在本地工作,但不在服务器上

$(".performance-box").click(function() { 
$.ajax({ 
    url: '/Home/Performance', 
    type: 'POST', 
    success: function (data) { 
     if (data) { 
      // Unrelated Stuff 
     } 
    } 
}); 
}) 

,因为它是一个相对路径,正确此网址没有在服务器上运行?

因此,我将其更改为~/Home/Performance,但现在这在本地不起作用。

有关如何在外部文件中处理此问题的任何指导将有所帮助。

+0

他们是在同一台服务器上?记住一个相对路径是相对于你所在的当前目录。 –

+0

我不确定我是否知道你的意思。在本地主机上运行时,文件结构应该与服务器上的完全相同。 – cfly24

+0

首先要开始检查浏览器开发工具-F12的网络选项卡中的实际请求。也应该在你的ajax中实现一个错误处理程序 – charlietfl

回答

1

在你的视图中存储Url.Action(“controller”,“action”)在一个全局js变量中,然后在你的外部JS中使用它,这就是我会这么做的。 由于您可能会在默认网站中本地托管您的网站,而生产中并非如此。使用Url操作将确保您将拥有正确的URL。

<script> 
    $(document).ready(function() { 
     init(); 
    }); 

    function init() { 
     url = '@Url.Action("Controller", "Action")' 
    } 
</script> 

外部JS

$(".performance-box").click(function() { 
$.ajax({ 
    url: url, 
    type: 'POST', 
    success: function (data) { 
     if (data) { 
      // Unrelated Stuff 
     } 
    } 
}); 
+0

我认为你需要引用@ Url.Action – Vince

+0

真的。感谢文斯,编辑:) – Moe

+0

这工作,但我必须分配一个值'url'而不声明它(所以它的全局),以便在外部文件中访问它 – cfly24

1

您应该能够使用该路由没有符号(〜),只要你的路由在MVC正确配置。

C#

//controller class attributes 
    [RouteArea("admin")] 
    [RoutePrefix("users")] 

    //method 
    [HttpGet, Route("autocomplete", Name = "Admin_Users_AutoComplete")] 
    public JsonResult Autocomplete(string q) 
    { 
      //do autocomplete 
    } 

的Jquery:

ajax: { 
     url: "/admin/users/autocomplete", 
     dataType: 'json', 
     type: 'POST', 
     cache: true 
    } 
相关问题