Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mvc3中带有ajax调用的ContentResult和数据类型_C#_Ajax_Json_Asp.net Mvc 3_Fusioncharts - Fatal编程技术网

C# Mvc3中带有ajax调用的ContentResult和数据类型

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

最近,我搜索了一个好的引擎,用Asp.NETMVC3生成图表。我终于找到了各种各样的图表类型

为了帮助我创建显示图表所需的xml,我找到了这个项目。该项目在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 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中使用不同的数据类型。再次感谢你。我会告诉你我的结果。