【问题标题】:Json call in js file returns NetworkError: 404 Not Foundjs 文件中的 Json 调用返回 NetworkError: 404 Not Found
【发布时间】:2012-08-16 03:35:40
【问题描述】:

我在我的应用程序中使用 asp.net mvc 4, knockout-js。 请问如何从js文件调用controller?

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

<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 中的 url 映射是:"{culture}/{controller}/{action}/{id}", 我的控制器的签名看起来像:public JsonResult GetTechnicians()

当我在js文件中使用时:

var url = "/Ticket/Technicians";

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

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

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

    • 嗨,Bart,你能解释一下运算符“:”的含义吗
    • 嗨 Bart,根据您的代码,我需要在 js 文件之外触发函数。发送给它当前的 url。请注意 url.action() 会返回当前的 url “culture/controller/action”。我认为我们只能使用:post("/"app.urls.getTechnicians,,).我们不需要文化属性,它会返回错误:“NetworkError: 404 Not Found - localhost/en/projectName/en/Ticket/GetTechnicians”。我试过:$.post("/" + app.urls.getTechnicians,,),这里它失败了,没有错误。它没有进入功能。谢谢奥利
    • @Ori Url.Action 仅适用于视图。如果你希望你的代码在一个单独的 JS 文件中,你需要传入 URL。从那时起,无论您是从页面还是从 JS 文件调用函数都无关紧要。另一种选择是将 url 传递给执行 Ajax 调用的函数,但是您需要预先知道何时何地调用它。我的解决方案要求您注册一次 URL,然后您可以在任何地方多次调用该函数。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-07-29
    • 2015-03-20
    • 1970-01-01
    • 2016-03-16
    • 2023-02-24
    • 1970-01-01
    • 2016-08-31
    • 2021-06-03
    相关资源
    最近更新 更多