gpt4 book ai didi

c# - 在 Mvc3 中使用 ajax 调用的 ContentResult 和 DataType

转载 作者:行者123 更新时间:2023-11-30 22:29:48 26 4
gpt4 key购买 nike

最近在找Asp.Net Mvc 3生成图表的好引擎,终于找到了FusionChart有多种图表类型。

为了帮助我创建显示图表所需的 xml,我找到了项目 Libero .该项目在 xml 和对象模型之间创建一个抽象级别来定义图形的属性。

该项目使用 Mvc2,我尝试将其转换为 Mvc3。除一个样本外,所有样本都运行良好;带有 ajax 调用的示例。

在示例中, Controller 返回一个 ContentResult,该 ContentResult 返回一个 xml 以动态更新图形。该项目在 Mvc2 中完美运行,但在 Mvc3 中运行不佳。

Controller 中的代码如下:

  public ActionResult GetSalesXmlData(string period, string chartType, string chartTemplate)
{
var salesXmlData = this.Content(GetSalesChart(period, chartType, chartTemplate).ToXML(), "text/xml");

return salesXmlData;
}

下面是 View 中的代码:

$.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=解析错误errorThrown=没有从 xml 到 application/json 的转换

经过一段时间的搜索,我在这个 stackoverflow question 中找到了如何解决我的问题.

阅读这篇文章后,我将我的 Controller 代码更改为:

  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 之后,我必须将 Controller 返回的结果从 ContentResult 更改为 JsonResult,并且在我看来,dataType 值从 application/JSON 更改为文本 json?

感谢您的宝贵时间。

最佳答案

在您的原始示例中,您指示 jQuery 将响应解析为 JSON,即使它是 XML。如果您在 MVC 升级过程中从旧版本的 jQuery 升级到新版本,这将解释解析器错误。旧版本的 jQuery 在解析 AJAX 响应方面相当快速和松散,但是当 jQuery 认为响应是 JSON 或您明确告诉它这样处理它们时,更高版本已经开始使用 JSON.parse

您的较新版本通过采用 XML 和 JSON 序列化该 XML 来解决这个问题。虽然这在技术上确实可行,但它增加了一个低效的冗余序列化层。

如果将 dataType 更改为 text/xml,您原来的方法是否有效?

说到效率,您是否考虑过使用 JSON 而不是 XML? FusionCharts appears to support that .然后,您可以完全避免 XML,通过网络使用更紧凑的序列化,并利用浏览器的 native JSON.parse 方法来更有效地解压缩响应。

关于c# - 在 Mvc3 中使用 ajax 调用的 ContentResult 和 DataType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com