2

在我的 ASP.net mvc3 项目中,我使用 ajax 调用将 json 数据发送到控制器公司中的 create actionmethod。但是当我调试 ajax 调用时,它总是以错误结果结束,而不是成功结果。

阿贾克斯调用:

$.ajax({
            url: '/Company/Create',
            type: 'POST',
            data: JSON.stringify(CreateCompany),
            dataType: 'Json',
            contentType: 'application/json; charset=utf-8',
            success: function () {
                alert('ajax call successful');
            },
            error: function () {
                alert('ajax call not successful');
            }
        });

我在公司控制器中的操作方法:

    [HttpPost]
    public ActionResult Create (Company company)
    {
        try
        {
            //Create company
            CompanyRepo.Create(company);
            return null;
        }
        catch
        {
            return View("Error");
        }
    }

我已经调试了 actionmethod,但他按照他应该的方式完成了它。因此,使用 ajax 调用发送的数据将被处理并写入数据库。(action方法不使用catch部分)。

为什么我的 ajax 调用仍然给出消息“ajax 调用不成功”?

4

3 回答 3

4

我曾经在取回 JSON 结果时遇到同样的问题。我所做的是将 dataType 设置为“text json”:)) 如果这无济于事,请尝试通过获取错误的详细信息来获取其他信息,即:

$.ajax({
        url: '/Company/Create',
        type: 'POST',
        data: JSON.stringify(CreateCompany),
        dataType: 'text json',
        contentType: 'application/json; charset=utf-8',
        success: function () {
            alert('ajax call successful');
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
        }
    });

顺便说一句:我在 StackOverflow 的某个地方找到了这个解决方案

于 2011-05-03T09:50:23.893 回答
1

null如果您的控制器操作成功,您为什么要返回?返回一些成功的东西,例如一个 JSON 对象(特别是你在 AJAX 请求中指出你期望来自服务器的 JSON 响应 - 使用dataType: 'json'设置 - 顺便说一下,它应该是小写j的):

return Json(new { success = true });
于 2011-05-03T09:44:57.470 回答
0

这不是更容易吗:

$.post("/Company/Create", function (d) {
    if (d.Success) {
        alert("Yay!");
    } else {
        alert("Aww...");
    }
}, "json");

在你的控制器中。

[HttpPost]
public JsonResult Create(
    [Bind(...)] Company Company) { <- Should be binding
    if (this.ModelState.IsValid) { <- Should be checking the model state if its valid
        CompanyRepo.Create(Company);

        return this.Json(new {
            Success = true
        });
    };

    return this.Json(new {
        Success = false
    });
}
于 2011-05-03T10:02:20.980 回答