[asp.net-mvc]从控制器中的 jquery ajax 误差函数获取数据 — — Asp.net MVC

发布时间: 2017/3/25 15:05:39
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个 jquery ajax 脚本如下

    $.ajax({
            type: "POST",
            url: "Main/receive", // the method we are calling
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ 'p':$("#txtname").val() }),
            dataType: "json",
            success: function (result) {
                alert('Yay! It worked!');
                // Or if you are returning something

            },
            error: function (result) {
                alert('Oh no zzzz:('+result.responseText);
            }
        });

我打电话到控制器操作方法。数据发送到控制器的操作方法,我也收到数据从控制器。但我收到的数据是 jquery ajax 在误差函数的内部。

我想要的成功函数内。

为什么我成功功能不被调用。

以下是我的控制器操作方法,

   [HttpPost]
    public string receive(string p)
    {
        ViewBag.name = p;
        return p;

    }

解决方法 1:

错误的原因是您已指定返回的数据类型是 json (在行中 dataType: "json", ) 但你方法返回文本。你有 2 个选项。

  1. 更改返回 json 使用的控制器方法return Json(p);
  2. Ajax 选项更改为 dataType: "text", 或只是忽略它

但是,您可以提高您的脚本如下所述

$.ajax({
  type: "POST",
  url: '@Url.Action("receive", "Main")', // don't hardcode url's
  data: { p: $("#txtname").val() }, // no need to stringify (delete the contentType: option)
  dataType: "json",
  success: function (result) {
      alert('Yay! It worked!');
  },
  error: function (result) {
      alert('Oh no zzzz:('+result.responseText);
  }
});

或者更简单

$.post('@Url.Action("receive", "Main")', { p: $("#txtname").val() }, function(result) {
    alert('Yay! It worked!');
}).fail(function(result) {
    alert('Oh no zzzz:('+result.responseText);
});

备注︰ 您应该始终使用 @Url.Action() 来生成正确的 url,和它是不必要在这种情况下,stringify 的数据 (但您需要删除 contentType: 线所以它使用默认值 application/x-www-form-urlencoded; charset=UTF-8 )

此外,这严格不是一篇文章 (你不变化的数据在服务器-但我以为这只是为了测试)。并不是在行中 ViewBag.name = p; -它不执行任何操作,在您的上下文中,只要你从该方法返回 ViewBag 无论如何是丢失。

官方微信
官方QQ群
31647020