Json调用js文件返回NetworkError:404 Not Found

时间:2012-08-20 19:28:29

标签: ajax json knockout.js asp.net-mvc-4

我在我的应用程序中使用asp.net mvc 4,knockout-js。 我想问一下如何从js文件调用控制器?

当我将此代码写入视图(razor)页面时,它可以工作:

<script type="text/javascript">
    $(document).ready(function () {
        var url = '@Url.Action("GetTechnicians", "Ticket")';
        $.post(url, null, function (data) {                    
            alert("get data");
        });
    });     
</script>

现在我想在* .js文件中进行调用。 问题是Url.Action在js文件中无效。

我在global.asax中的网址映射是:"{culture}/{controller}/{action}/{id}", 我的控制器的签名如下:public JsonResult GetTechnicians()

当我在js文件中使用时:

var url = "/Ticket/Technicians";

我收到错误:"NetworkError: 404 Not Found - http://localhost/Ticket/Technicians"

我想知道如何从js文件中完成调用?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作...

在您的JS文件中

var app = {
  urls: {
    getTechnicians: null
  },
  culture: "en",
  getTechnicians: function () {
        if (!app.urls.getTechnicians) {
          throw new Error("getTechnicians URL not set");
        }
        $.post("/" + app.culture + app.urls.getTechnicians, null, function (data) {                    
            alert("get data");
        });
  }
};

在你看来

<script type="text/javascript" src="myscriptfile.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
     app.urls.getTechnicians = '@Url.Action("GetTechnicians", "Ticket")';
     app.culture = "en-us";

     // Later on...
     app.getTechnicians();

    });     
</script>