2010-10-08 2 views
1

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

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 в нем, но никакой разницы.

ответ

2

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

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

+1

Я считаю это ошибкой в ​​реализации FireFox, но вы работаете с тем, что получили, а не тем, что хотите. –

0

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

return Json(response); 

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

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

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

Смежные вопросы