C# Mvc3中带有ajax调用的ContentResult和数据类型
最近,我搜索了一个好的引擎,用Asp.NETMVC3生成图表。我终于找到了各种各样的图表类型 为了帮助我创建显示图表所需的xml,我找到了这个项目。该项目在xml和对象模型之间创建一个抽象级别,以定义图形的属性 该项目使用Mvc2,我尝试将其转换为Mvc3。除一个样品外,所有样品都工作正常;一个ajax调用示例 在示例中,控制器返回ContentResult,该结果返回xml以动态更新图形。该项目在Mvc2中工作得很好,但在Mvc3中却不能 以下是控制器中的代码:C# Mvc3中带有ajax调用的ContentResult和数据类型,c#,ajax,json,asp.net-mvc-3,fusioncharts,C#,Ajax,Json,Asp.net Mvc 3,Fusioncharts,最近,我搜索了一个好的引擎,用Asp.NETMVC3生成图表。我终于找到了各种各样的图表类型 为了帮助我创建显示图表所需的xml,我找到了这个项目。该项目在xml和对象模型之间创建一个抽象级别,以定义图形的属性 该项目使用Mvc2,我尝试将其转换为Mvc3。除一个样品外,所有样品都工作正常;一个ajax调用示例 在示例中,控制器返回ContentResult,该结果返回xml以动态更新图形。该项目在Mvc2中工作得很好,但在Mvc3中却不能 以下是控制器中的代码: public Action
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
ErrorSprown=没有从xml到应用程序/json的转换
经过一段时间的搜索,我发现了如何纠正我在这方面的问题
读完这篇文章后,我将控制器代码更改为:
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,并且在我看来,数据类型值从应用程序/JSON更改为文本JSON
感谢您的时间。在您最初的示例中,您指示jQuery将响应解析为JSON,即使它是XML。如果您在MVC升级过程中从较旧版本的jQuery升级到较新版本,则可以解释解析器错误。较旧版本的jQuery在解析AJAX响应方面相当快速和松散,但较新版本已经开始使用
JSON.parse
,当jQuery认为响应是JSON或者您明确告诉它将其作为JSON处理时
您的新版本通过将XML和JSON序列化来解决这个问题。虽然这在技术上确实有效,但它增加了一层低效的冗余序列化
如果您将数据类型
更改为文本/xml
,您的原始方法是否有效
说到效率,您是否考虑过使用JSON而不是XML。然后,您可以完全避免使用XML,通过网络使用更紧凑的序列化,并利用浏览器的本机
JSON.parse
方法来更有效地解压响应。我想了解您所掌握的深入知识。我一定会再读一遍你的建议,并搜索更多关于我使用的jQuery版本的信息,我可以在ContentResult中使用不同的数据类型。再次感谢你。我会告诉你我的结果。