2

私はMVC3を使用しており、187の名前と値のペア(としてList<OrientationData>)を持つJsonResultを返すアクションがありますが、多くの場合、ajax呼び出しから受信したデータは切り捨てられ、解析できません。

これは常にJsonResultを介して同じ187アイテムを返すため、長さの問題であれば、毎回失敗すると思います。アクションは次のとおりです。

[HttpPost]
    public JsonResult GetAllMetrics()
    {
        var metrics = metric.GetAllMetrics();
        return Json(metrics);
    }

これはjQueryajax呼び出しです:

$.ajax({
            url: urlGetAllMetrics,
            type: 'POST',
            data: jsonData,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (ajaxData) {
                if (ajaxData && ajaxData.length > 0) {
                    //populate data here
                }
            },
            error: function (msg) {
                alert(msg);
            }
        });

ajax呼び出しに返される結果が途切れる場合があり、実際には2つの異なる場所で途切れているように見えます。これにはどのような理由が考えられますか?

また、Fiddlerを使用してトラフィックをキャプチャすると、返されたデータを切り捨てることなく毎回機能することにも注意してください(理由はまだわかりません)。Fiddlerを使用しない場合、jsonへの文字列を解析できないため、ajaxでエラーが発生することがよくあります。データは、値とテキストの文字列プロパティを持つ配列です。返されるテキストは途切れます:

...,{"Value":"h12","Text":"h12 name goes here"},{"Val
4

2 に答える 2

1

プロパティのデフォルト値(102400〜100kb)のため、切り捨てられmaxJsonLengthます。web.configで変更してみてください。

<configuration> 
    <system.web.extensions>
        <scripting>
            <webServices>
                <jsonSerialization maxJsonLength="50000000"/>
            </webServices>
        </scripting>
    </system.web.extensions>
</configuration> 
于 2013-03-05T15:02:21.040 に答える
0

この問題の解決策が思いつかなかったので...

WCF への回答に示されているように、webHttpBinding を使用して WCF サービスに追加しました: maxStringContentLength は常に 8192に設定され、サービス クラスに次の属性を設定します。

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

そして、基礎となるクラスに DataContract および DataMember 属性を必ず追加してください。

[DataContract]
public class OrientationData
{
    [DataMember]
    public string Value { get; set; }
    [DataMember]
    public string Text { get; set; }
}

また、メソッドを次のように切り替えました (現在はインターフェイスに OperationContract があります)。

public List<OrientationData> GetAllMetrics()
    {
        var metrics = metric.GetAllMetrics();
        return metrics;
    }

より良い答えがあればいいのにと思いますが、他の誰かがこの問題に遭遇した場合、これはそれを解決する1つの方法です. もちろん、別の投稿でDavid Murdochが述べたように、MVC 4 に切り替えると、この回答によっても修正されると思います。

于 2013-03-05T21:38:08.793 に答える