Проблема с ответом JSON из ASP.NET MVC в некоторых браузерах - PullRequest
1 голос
/ 09 октября 2010

Я использую плагин формы jQuery (как предложено в ряде потоков, таких как этот ), чтобы сделать запись Ajax на контроллер .NET MVC и использовать JSON, который я получаю обратно.Он отлично работает в Chrome, но в некоторых других браузерах, включая Firefox 3, форма отправляет результаты в диалоговом окне «Сохранить или открыть этот файл».JavaScript выглядит так:

var options = {
            dataType: "json",
            clearForm: true,
            beforeSubmit: hideUpdateField,
            success: handleNewsPostSuccess
        };

        $('div#Updates form').ajaxForm(options);

, а ответ контроллера:

Object response = new { html = RenderPartialViewToString("DisplayNewsPost", np), newpoints = points.ToString() };
return Json(response, "application/json; charset=utf-8");

Чего мне не хватает?Это похоже на то, что событие отправки не прикрепляется в Firefox и других проблемных браузерах.Я попытался сделать свое собственное действие отправки с использованием ajaxSubmit вместо возврата false, но без разницы.

Ответы [ 3 ]

2 голосов
/ 09 октября 2010

Используйте другой тип MIME для ответа;простой text/plain должен работать.Я полагаю, что FF смущен неизвестным application/* MIME-типом и поэтому предполагает, что некоторые специфичные для приложения данные лучше всего загружать в виде отдельного файла.

В качестве альтернативы, вы можете поэкспериментировать с заголовком Content-Disposition, установив его в inline.Firefox должен подчиняться ему, но у IIRC могут быть некоторые проблемы с ним в IE.

0 голосов
/ 09 октября 2010

Метод Json уже устанавливает правильный тип содержимого, поэтому вам не нужно его повторять:

return Json(response);

Но из описанного вами поведения (диалоговое окно Сохранить как) я подозреваю, что форма на самом делене публикуется с использованием AJAX, но обычный POST.Это может быть связано с тем, что DOM не был готов, когда вы применили функцию .ajaxForm.Убедитесь, что вы изменяете форму внутри $(document).ready:

$(function() {
    var options = {
        dataType: "json",
        clearForm: true,
        beforeSubmit: hideUpdateField,
        success: handleNewsPostSuccess
    };
    $('div#Updates form').ajaxForm(options);
});

Также, если при обратном вызове handleNewsPostSuccess вы воссоздаете форму в DOM, ajaxForm может больше не применяться к ней, а втораяКогда вы попытаетесь отправить его, он выполнит обычный POST.

0 голосов
/ 09 октября 2010

Я не уверен, что вы столкнулись с той же проблемой, но этот вопрос и ответы могут помочь вам

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