为什么有时我不得不parseJSON,有时不执行ajax请求?

Bro*_*ato 1 ajax asp.net-mvc jquery

我有2个基本的测试应用程序,我在那里做ajax请求.在调用ajax请求之后,对于第一个请求,我需要在检索值之前解析ajax data.responseText.对于第二个,我可以直接访问值.

第一个应用程序的代码:

@using (Ajax.BeginForm("JsonAdd", "People", new AjaxOptions { OnComplete = "JsonAdd_OnComplete" }))
{
...
}

function JsonAdd_OnComplete(data) {

    var json = $.parseJSON(data.responseText);

    if (json.Success) {
        $("#PersonList").html(json.PartialViewHtml);
    }

    $("#addPersonModal").slideToggle();
    $("#message").html(json.Message);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我需要在获取值之前先解析data.responseText.

这是第二个应用程序:

@using (Ajax.BeginForm("_NewPersonToKeepInformed", "General", new { id = "NewPersonToKeepInformed" }, new AjaxOptions { Confirm = "Are you sure ?", HttpMethod = "POST", OnSuccess = "AddedSuccess" }))

function AddedSuccess(response) {
    alert(response.message);
}
Run Code Online (Sandbox Code Playgroud)

对于这个,我直接访问值.

UPDATE

这是我的控制器动作方法:

    public JsonResult JsonAdd(AddPersonViewModel AddPersonModel)
    {
        ...
        return Json(new
        {
            Success = true,
            Message = "The person has been added!"
        });
    }
Run Code Online (Sandbox Code Playgroud)

这是第二个:

    public JsonResult _NewPersonToKeepInformed(NewPersonToKeepInformedViewModel viewModel)
    {
        ...
        // return newly added person in a Json object
        return Json(new { message = "Ajout effectué", firstName = viewModel.FirstName, lastName = viewModel.LastName, phone = viewModel.Phone, mail = viewModel.Mail });
    }
Run Code Online (Sandbox Code Playgroud)

为什么?

谢谢.

Dar*_*rov 6

在第一种情况下,您使用OnComplete和在第二种情况下使用OnSuccess.这就是区别.它们对应于jQuery completesuccess回调.jQuery不会根据complete回调中的Content-Type标头解析服务器的响应.这就是你需要手动解析它的原因.在success回调中,这是自动完成的.所以,如果你想这对你的第一个动作替换工作new AjaxOptions { OnComplete = "JsonAdd_OnComplete" }new AjaxOptions { OnSuccess = "JsonAdd_OnComplete" }