【问题标题】:Issue while ajax request in MVC5MVC5 中的 ajax 请求时出现问题
【发布时间】:2015-12-29 09:12:00
【问题描述】:

在我的 mvc5 项目中应用 ajax 请求时,我遇到了一个非常奇怪的问题。这是我在 Index.cshtml 中的代码:

  $(document).ready(function () {
 for (var i = 0; i < 3; i++) {
        $.ajax({
            type: "GET",
            url: "Home/LoadTodayStories",
            data: { pageIndex: blockNumber, pageSize: 8, index: i }, 
            dataType: 'html',
            async: false,
            beforeSend: function () { $("#loadingDiv").show(); },
            complete: function () { $('#loadingDiv').hide(); },
            success: function (data) {
                $('.today-spl').append(data);
            },
            error: function (e) { alert(e.responseText); }
        });
    }
});

当我刚刚运行我的项目并且没有包含控制器名称和操作方法的完整 url 时,此代码可以完美运行。换句话说,如果 url 只是“http://localhost:52572/”,则代码可以工作,但是当我包含控制器名称和操作方法(例如“http://localhost:52572/Home/Index”)时,我收到错误消息:

找不到资源。 说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/Home/Home/LoadTodayStories

附:我知道错误是什么,我需要从

更改我的 ajax 请求 url 部分
url: "Home/LoadTodayStories",

 url: "LoadTodayStories",

但是在更改这部分之后,代码开始使用 url “http://localhost:52572/Home/Index” 而不能使用“http://localhost:52572/”。有谁知道如何在这两种条件下完成这项工作?

我的 RouteConfig.cs:

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

【问题讨论】:

  • 显示您的路线配置。
  • @Ric 请查看我编辑的问题
  • 您是否尝试将contentType 设置为contentType: "application/json; charset=utf-8"?同时显示你的LoadTodayStories方法
  • @Ric 这应该如何影响代码?内容类型仅指示您要发送到服务器以进行 ajax 请求的数据类型。
  • 我相信默认的内容类型不是application/json api.jquery.com/jquery.ajax 而你发送的是json

标签: .net ajax asp.net-mvc asp.net-mvc-5


【解决方案1】:

硬编码的网址总是给我带来问题,而且无论如何都是个坏主意。我总是使用 url helpers。

 url: "@Url.Action("LoadTodayStories","Home")"

如果这是在一个单独的 javascript 文件中,其中 html 帮助器不可用,只需在视图中添加一个隐藏字段:

<input type="hidden" id="loadTodayStoriesUrl" value="@Url.Action("LoadTodayStories", "Home")" />

然后在你的javascript中,从隐藏中获取生成的url:

url: $('#loadTodayStoriesUrl').val()

【讨论】:

    【解决方案2】:

    您应该始终在您的网址中包含控制器和操作名称。但请记住,这完全取决于您的路由配置——您可以将特定的控制器和操作重新映射到不同的 url。 你可以看这里:http://stephenwalther.com/archive/2015/02/07/asp-net-5-deep-dive-routing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2016-05-02
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      相关资源
      最近更新 更多