2012-04-02 3 views
2

最近、私はAsp.Net Mvc 3でチャートを生成するための良いエンジンを探しました。私は最終的に非常に良い種類のチャートタイプを持っているFusionChartを見つけました。ContentResultとDataTypeがMvc3でajaxを呼び出す

グラフを表示するのに必要なxmlの作成を手伝うために、私はプロジェクトLiberoを見つけました。このプロジェクトでは、グラフィックスのプロパティを定義するために、XMLとオブジェクトモデルの間の抽象レベルを作成します。

プロジェクトではMvc2を使用していますが、Mvc3に変換しようとしました。すべてのサンプルは1つを除いて完全に動作します。 ajax呼び出しのサンプル。

サンプルでは、​​コントローラーはグラフィックを動的に更新するためにxmlを返すContentResultを返します。このプロジェクトはMvc2では完全に機能しますが、Mvc3では機能しません。ここで

は、コントローラのコードです:

$.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でこのコードを実行しようとすると、私はこのエラーが表示されます。

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

    return salesXmlData; 
    } 

そして、ここでは、ビューのコードは次のとおりです。

textStatus = parsererror errorThrown = XMLからアプリケーション/ JSONへの変換

しばらく検索したところ、私はこのstackoverflow questionの問題を解決する方法を見つけました。

この記事を読んだ後、私はこれに私のコントローラのコードを変更:

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は、私がテキストJSONに、するJsonResultへContentResultからコントローラによって、私のビューでアプリケーション/ JSONからのデータ型の値を結果のリターンを変更する必要がありますか?

ありがとうございます。

答えて

3

あなたの元の例では、あなたはそれがXMLであるにもかかわらずJSONとして応答を解析するためのjQueryを指示しました。古いバージョンのjQueryからMVCのアップグレードプロセスの一部として新しいバージョンにアップグレードした場合、パーサーエラーが説明されます。 jQueryの古いバージョンのAJAXの応答を解析についてかなり速いと緩んでいましたが、それ以降のバージョンでは、jQueryの応答がJSONであることを信じているか、あなたがそのように明示的に扱うためにそれを伝えるときJSON.parseを使用し始めています。

あなたの新しいバージョンは、XMLを取り、そのXMLをJSON-シリアライズすることによって、この回避します。それは技術的には機能しますが、冗長シリアル化の非効率的なレイヤーが追加されています。あなたはtext/xmlからdataTypeを変更した場合

は、元のアプローチの仕事をしていますか?

効率といえば、XMLの代わりにJSONを使用することを検討しましたか? FusionCharts appears to support that。その後、XMLを完全に回避し、よりコンパクトなシリアル化を使用し、ブラウザのネイティブJSON.parseメソッドを利用すると、応答をより効率的に展開できます。

+0

私はあなたが持っている深い知識を持っていたいと思います。私は確かに推奨事項を再度読んで読んで、私が使っているjQueryのバージョン、ContentResultで使うことができる別のデータタイプについてもっと詳しく調べていきます。ありがとうございました。私は私の結果についてあなたにお返しします。 – Samuel

関連する問題