在jquery ajax的错误函数中从控制器获取数据 - Asp.net MVC

时间:2015-05-23 07:17:01

标签: c# jquery .net ajax asp.net-mvc

我有一个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);
            }
        });

我正在调用Controller动作方法。数据正在发送到控制器的操作方法,我也从控制器接收数据。但是我收到的数据是在jquery ajax的错误函数中。

我希望它在成功函数内部。

为什么我的成功功能没有被调用。

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

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

    }

3 个答案:

答案 0 :(得分:1)

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

  1. 使用return Json(p);
  2. 更改控制器方法以返回json
  3. 将ajax选项更改为dataType: "text",或只是省略它
  4. 但是,您可以改进您的脚本,如下所示

    $.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()生成正确的网址,在这种情况下不必对数据进行字符串化(但您需要删除contentType:行,以便使用默认值application/x-www-form-urlencoded; charset=UTF-8

    此外,这不是严格意义上的POST(您在服务器上没有更改数据 - 但我认为这仅用于测试)。行ViewBag.name = p;中没有任何意义 - 它在您的上下文中没有任何作用,一旦您从方法返回,ViewBag无论如何都会丢失。

答案 1 :(得分:0)

尝试更改您的控制器代码,如下所示

[HttpPost]
 public ActionResult List(string p)
    {
       ViewBag.name = p;
       return Json(ViewBag);
    }

答案 2 :(得分:0)

您的控制器方法应如下所示:

[HttpPost]
public ActionResult receive(string p)
{
   return Json(p);
}