jquery - 为什么在执行 ajax 请求时有时必须解析 JSON,有时则不需要?

标签 jquery ajax asp.net-mvc

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

如您所见,我需要在获取值之前先解析 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);
}

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

更新

这是我的 Controller 操作方法:

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

这是第二个:

    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 });
    }

为什么?

谢谢。

最佳答案

在第一种情况下,您使用OnComplete,在第二种情况下,您使用OnSuccess。这就是区别。它们对应于 jQuery 的 completesuccess 回调。 jQuery 不会根据 complete 回调中的 Content-Type header 解析服务器的响应。这就是为什么你需要手动解析它。在 success 回调中,这是自动完成的。因此,如果您希望这适用于您的第一个操作,请将 new AjaxOptions { OnComplete = "JsonAdd_OnComplete"} 替换为 new AjaxOptions { OnSuccess = "JsonAdd_OnComplete"}

关于jquery - 为什么在执行 ajax 请求时有时必须解析 JSON,有时则不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9332494/

相关文章:

Pythonic/djangonic 以秒为单位处理用户超时的方式(如果需要的话,也可以以分钟为单位)

javascript - 基于HTML5数据元素的jQuery刷新div

javascript - Jquery Animate - 使元素只弹跳一次

javascript - 当我的下拉列表的值发生变化时,如何触发 Javascript/AJAX 代码?

jquery - 将 div 拖到另一个 div

php - AJAX sendlike.php 喜欢和不喜欢 PHP 和 mysql

jquery - 嵌套 jQuery onClick 事件处理程序多次触发

asp.net-mvc - 保持ASP.NET MVC网站IIS6随时准备接受请求

c# - JQGrid 高级搜索 - 我们可以同时使用 "AND"和 "OR"运算符吗?

asp.net-mvc - 在 VB 中的 HTML.TextBoxFor 中设置 CSS 类