JQuery Ajax-запрос возвращает нулевой JSON только в Internet Explorer - PullRequest
1 голос
/ 21 марта 2011

Я делаю JQuery Ajax-запрос к контроллеру ASP.NET MVC с помощью плагина jQuery Form.

Вызов работает нормально, но когда я анализирую ожидаемый JSON, я получаю ожидаемый результат в Firefox, но я получаю значение NULL в Internet Explorer.

Ajax-вызов выглядит так:

var options = {
    iframe: true,
    dataType: 'json',
    success: function (result, status) {
        $.unblockUI();
        _editingEmail = false;

        if (result.Sent === true) {
            ... Do something
        }

        $("#messageSentResult").html("<div>" + result.Message + "</div>");
    },
    error: function (xhr, textStatus, errorThrown) {
        $.unblockUI();
        alert(textStatus);
    },
    beforeSubmit: function () {
        $.blockUI({
            message: '<h1>Processing...</h1>'
        });
    }
};

$('#myForm').ajaxForm(options);

Это мой контроллер:

[HttpPost]
public FileUploadJsonResult MyMethod()
{
    ... Do something

    if(ValidationFails())
    {
        return new FileUploadJsonResult { Data = new { Sent = false, Message = "The operation was not successful." } };
    }

    return new FileUploadJsonResult { Data = new { Sent = true, Message = "The operation succeeded." } };
}

Класс FileUploadJsonResult выглядит следующим образом:

public override void ExecuteResult(ControllerContext context)
{
    this.ContentType = "text/html";
    context.HttpContext.Response.Write("<textarea>");
    base.ExecuteResult(context);
    context.HttpContext.Response.Write("</textarea>");
}

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Вы должны убедиться, что на вашей HTML-странице нет ошибок и предупреждений, и установить для конфигурации ajax:

$.ajaxSetup({ cache: false });
0 голосов
/ 21 марта 2011

Вы пробовали установить cache: false в ваших настройках?По умолчанию IE кеширует GET-запросы, которые .ajax() использует, если не указано иное.Это может быть причиной вашей проблемы.

РЕДАКТИРОВАТЬ:

Вы пытались изменить ContentType на application/json?Вот так:

public override void ExecuteResult(ControllerContext context)
{
    this.ContentType = "application/json";
    context.HttpContext.Response.Write("<textarea>");
    base.ExecuteResult(context);
    context.HttpContext.Response.Write("</textarea>");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...