1

私のasp.net mvc 4 Webアプリでは、コントローラーのアクションがjquery ajaxコールバックに無効なデータを返すようです...アクションはIPにpingを実行しており、いくつかのajax呼び出しから数回呼び出されます複数の IP に対して ping を実行します。

コントローラーでの私のアクションの一部(返されるものの下):

            Response.ContentType = "application/json;charset=utf-8";
            Response.StatusCode = (int)(packetsLost < 4 ? HttpStatusCode.OK : HttpStatusCode.NotFound);
            Response.TrySkipIisCustomErrors = true;
            return new JsonResult()
            {                    
                ContentType = "application/json;charset=utf-8",
                Data = new
                {
                    sent = 4,
                    received = 4 - packetsLost,
                    lost = packetsLost,
                    percentLost = (int) (packetsLost / 4 * 100),
                    responseStatus01 = statuses[0],
                    responseStatus02 = statuses[1],
                    responseStatus03 = statuses[2],
                    responseStatus04 = statuses[3],
                    responseMessage01 = responseStatuses[0],
                    responseMessage02 = responseStatuses[1],
                    responseMessage03 = responseStatuses[2],
                    responseMessage04 = responseStatuses[3],
                    rtt01 = rtt[0],
                    rtt02 = rtt[1],
                    rtt03 = rtt[2],
                    rtt04 = rtt[3],
                    ttl01 = ttl[0],
                    ttl02 = ttl[1],
                    ttl03 = ttl[2],
                    ttl04 = ttl[3],
                    minRtt = roundTripTimes.Count == 0 ? "0" : string.Format("{0}ms", roundTripTimes.Min()),
                    maxRtt = roundTripTimes.Count == 0 ? "0" : string.Format("{0}ms", roundTripTimes.Max()),
                    avgRtt = roundTripTimes.Count == 0 ? "0" : string.Format("{0}ms", roundTripTimes.Average())
                },                   
                JsonRequestBehavior = JsonRequestBehavior.AllowGet 
            };

そしてjquery ajax呼び出し:

ajax({
        url: '/Controller/Action/',
        type: 'POST'
    }).then(function (data) {
        var _data;
        try {
            _data = $.parseJSON(data);
        }
        catch (err) {
            alert("Something went bad!!!");
        }
    }, function (data) {
        var _data;
        try {
            _var = $.parseJSON(data.responseText);
        }
        catch (err) {
            alert("Something went bad!!!");
        }
    });

1) アクションが http ステータス コード OK (200) を返す場合、jquery ajax コールバックの data.responseText が空であるため、代わりにデータを変換します (正しいデータを含む) が、何らかの理由で parseJSON(data) を使用して変換するとクラッシュします: エラーがキャッチされました無効な文字と言います...理由はわかりません...

2)アクションがhttpステータスコードNotFound(404)を返す場合、data.responseTextが空である場合があり(常にではありません)、データ内のstatusTextが「エラー」であるため、どちらも理解できません....

コントローラーのアクションは常に正しいデータを返します....

誰かがこのエラーを検出するのを手伝ってくれますか? または正しい方向に私を右....

更新: つまり、開発ツールから、ネットワークで、いくつかの ping がキャンセルされ、それらを処理しようとすると空の responseText が ajax コールバックに返されるため、解析しようとするとクラッシュすることがわかりました。ping のタイムアウトを 750 ミリ秒などの低い値に設定すると機能しますが、ping のデフォルトのタイムアウト、つまり 5 秒を使用すると機能しません。いくつかの ping がキャンセルされ、それらを提供しようとすると、空のresponseTextが返され、ajaxコールバックで解析しようとするとクラッシュします。

4

0 に答える 0