Недавно я искал хороший движок для генерации диаграмм с помощью Asp.Net Mvc 3. Я наконец нашел FusionChart , у которого есть очень хорошие варианты типов диаграмм.
Для того, чтобы помочь мнеСоздав xml, необходимый для отображения диаграммы, я нашел проект Libero .Этот проект создает уровень абстракции между XML и объектной моделью для определения свойств графики.
В проекте используется Mvc2, и я попытался преобразовать его в Mvc3.Все образцы отлично работают, кроме одного;пример с вызовом ajax.
В этом примере контроллер возвращает ContentResult, который возвращает XML для динамического обновления графики.Проект отлично работает в Mvc2, но не в Mvc3.
Вот код в контроллере:
public ActionResult GetSalesXmlData(string period, string chartType, string chartTemplate)
{
var salesXmlData = this.Content(GetSalesChart(period, chartType, chartTemplate).ToXML(), "text/xml");
return salesXmlData;
}
А вот код в представлении:
$.ajax({
url: "/Home/GetSalesXmlData",
type: "POST",
data: { chartType: chartType, chartTemplate: chartTemplate, period: period },
dataType: "application/JSON",
success: function (data) {
Chart01.xmlData = data;
Chart01.chartType = chartType;
Chart01.showChart();
},
error: function () {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
}
});
Когда я пытаюсь выполнить этот код в Mvc3, я получаю эту ошибку:
textStatus = parsererror errorThrown = Нет преобразования из XML в приложение / JSON
После поиска некоторое время, я нашелкак исправить мою проблему в этом stackoverflow вопросе .
После прочтения этого поста я изменил свой код контроллера на такой:
public JsonResult GetSalesXmlData(string period, string chartType, string chartTemplate)
{
var salesXmlData = this.Json(GetSalesChart(period, chartType, chartTemplate).ToXML(), "text/xml");
return salesXmlData;
}
И мой вызов ajax к этому:
$.ajax({
url: "/Home/GetSalesXmlData",
type: "POST",
data: { chartType: chartType, chartTemplate: chartTemplate, period: period },
dataType: "text json",
success: function (result) {
Chart01.xmlData = result;
Chart01.chartType = chartType;
Chart01.showChart();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
}
});
Мой вопрос: почему после преобразования моего проекта из Mvc2 в Mvc3 я должен изменить результат, возвращаемый контроллером, с ContentResult на JsonResult, и, на мой взгляд, значение dataType из приложения/ JSON до текст json ?
Спасибо за потраченное время.