2

私はこのブログ投稿をガイドとして使用しており、jQueryとjTemplatesを使用してJSON応答をテンプレートに詰め込む方法を詳しく説明しています。

私の問題は、返されたフィールドの1つ(Descriptionという名前)にHTMLが含まれているのに、HTMLブラケットが\u003Cと\u003eにエンコードされていることです。

サーバーが返すHTML([説明]フィールド)は次のとおりです。

<a href="/en/Yokota/User/Show/Chad">Chad</a> updated their ad, <a href="/en/Yokota/Ad/Show/100">Validation Test Ad Again</a>, @<a href="/en/Yokota">Yokota</a>

JSON応答は次のようになります。

[{"TypeOfActivity":"0","Description":"\u003ca href=\"/en/Yokota/User/Show/YokotaTour\"\u003eYokotaTour\u003c/a\u003e posted \u003ca href=\"/en/Yokota/Ad/Show/166\"\u003eOne of the best for sure\u003c/a\u003e for sale @\u003ca href=\"/en/Yokota\"\u003eYokota\u003c/a\u003e","DateHappened":"6/23/2010 12:26:55 AM"}]

「\u003c」または「\u003e」に注意してください。それらはUnicodeエスケープのように見えますが、なぜそれが起こっているのですか?JSON応答を呼び出すjQueryは次のとおりです。

$.getJSON("<%= Url.Action("List", "Activity") %>",
    function(data){
        $("#aLog").setTemplate($("#templateHolder").html());
        $("#aLog").processTemplate(data);
    });

アップデート

これは、ページが完全に読み込まれたときのソースの外観です(Firefoxでは[表示]> [ページソース])。

&lt;a href="/en/Yokota/User/Show/Chad"&gt;Chad&lt;/a&gt; updated their ad, &lt;a href="/en/Yokota/Ad/Show/100"&gt;Validation Test Ad Again&lt;/a&gt;, @&lt;a href="/en/Yokota"&gt;Yokota&lt;/a&gt;

午前3時が近づいているせいかもしれませんが、困惑しています...どんな助けでも大歓迎です-ありがとう!

アップデート2

public JsonResult List()
{
    IList<ActivityContract> contracts = new List<ActivityContract>();
    var activityList = _db.Activity.ByBaseID(CurrentBase.BaseID).OrderByDescending(a => a.DateHappened);
    foreach (var a in activityList) {
        contracts.Add(new ActivityContract { TypeOfActivity = a.TypeOfActivity.ToString(), Description = a.Description, DateHappened = a.DateHappened.ToString() });
    }
    return Json(contracts, JsonRequestBehavior.AllowGet);
}
4

3 に答える 3

3

結局のところ、問題はjTemplatesの設定にありました。setTemplate行は次のようにする必要があります。

$("#aLog").setTemplate($("#templateHolder").html(), [], {filter_data: false});

特に、filter_dataはfalseに設定する必要がありました。デフォルトでは、jTemplateshtmlがエンコードします。;(

于 2010-06-23T08:55:30.740 に答える
0

utf8の「contentType」を使用した例でこのようなチェックを行い ます

       $.ajax({
                type:"GET",
                url: "<%= Url.Action("List", "Activity") %>",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data){
                    $("#aLog").setTemplate($("#templateHolder").html());
                    $("#aLog").processTemplate(data);
                }
            });
        });
于 2010-06-22T17:46:47.083 に答える
0

JSONSerializerは、「<」および「>」文字をユニコードエスケープシーケンスで自動的にエスケープします。

jQueryはこれらを正常に解析できるはずです。$ .getJSONメソッドを使用しています。これは、応答をjsonとして自動的に評価し、エスケープを解除すると思っていたため、最終出力にエスケープコードが含まれている理由について少し困惑しています。

もし、するなら:

$("#aLog").processTemplate(eval("(" + data+ ")"));

それで問題は解決しますか?

于 2010-06-22T18:05:40.997 に答える