Почему иногда мне приходилось анализировать JSON, а иногда нет при выполнении запросов ajax? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть 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);
}

Как видите, мне нужно проанализировать данные.Сначала откройте текст 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);
}

Для этого я напрямую обращаюсь к значениям.

Вот мой метод действия контроллера:

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

Почему?

Спасибо.

1 Ответ

6 голосов
/ 17 февраля 2012

В первом случае вы используете OnComplete, а во втором - OnSuccess. В этом разница. Они соответствуют обратным вызовам complete и success в jQuery. jQuery не анализирует ответ сервера на основе заголовка Content-Type внутри обратного вызова complete. Вот почему вам нужно разобрать его вручную. В обратном вызове success это делается автоматически. Поэтому, если вы хотите, чтобы это работало для вашего первого действия, замените new AjaxOptions { OnComplete = "JsonAdd_OnComplete" } на new AjaxOptions { OnSuccess = "JsonAdd_OnComplete" }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...