3

私はjson応答を次のようにフォーマットしようとしています:

[
{
    "id": "23029",
    "label": "F:\path\to\file\filename.txt",
    "value": "filename.txt"
},
{
    "id": "23030",
    "label": "F:\path\to\file\filename.txt",
    "value": "filename.txt"
},
{
    "id": "23031",
    "label": "F:\path\to\file\filename.txt",
    "value": "filename.txt"
}

]

しかし、JSONLintによると、 \ は「構造」を壊していますか? \ を | に置き換えると それは動作するので、\ が問題であることはわかっています。jQuery の Autocompleteで応答を使用しています。

代わりに SerializeJSON() を使用する必要がありますか? もしそうなら、ajax オートコンプリート スクリプトで何かを変更する必要がありますか?

$(function() {
    var cache = {},
        lastXhr;
    $( "#media" ).autocomplete({
        minLength: 2,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }

            lastXhr = $.getJSON( "ajax/search.cfm", request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
    });
});
4

3 に答える 3

8

\エスケープ文字であり、コンテンツの一部である場合はそれ自体をエスケープする必要があります。

したがって、JSON文字列はクライアントが受け取る前に次のようになります。

[
    {
        "id": "23029",
        "label": "F:\\path\\to\\file\\filename.txt",
        "value": "filename.txt"
    },
    {
        "id": "23030",
        "label": "F:\\path\\to\\file\\filename.txt",
        "value": "filename.txt"
    },
    {
        "id": "23031",
        "label": "F:\\path\\to\\file\\filename.txt",
        "value": "filename.txt"
    }
]
于 2012-04-04T14:10:21.487 に答える
8

バックスラッシュをエスケープしようとしましたか?

{
"id": "23030",
"label": "F:\\path\\to\\file\\filename.ext",
"value": "filename.txt"
}
于 2012-04-04T14:11:29.153 に答える
4

他のレスポンダーはバックスラッシュをエスケープする必要があると指摘しています、serializeJSON()を使用すると、そのエスケープが処理されます。

于 2012-04-04T19:50:04.843 に答える