2

今日、いくつかの ajax リクエストを処理しているときに、本当に奇妙な問題に遭遇しました。簡単なリクエストを送信した後、JSON 形式のサーバー レスポンスは次のようになります。

{
coach_id: "172"
email: "foo@bar.com"
focus_area: "Ke da\nMetrics"
id: "433"
success_metrics: "\"Calm\""
user_id: "809"
}

このオブジェクトを pure.js テンプレートのデータとして使用したい (テンプレート システムではなく、それ自体が問題であるため、問題ではありません)。

$('#new-client').directives({
    '#client-email@value' : 'email',
    '#client-focus' : 'focus_area',
    '#client-success' : 'success_metrics'
}).render(myObject);

シンプルな入力として電子メールを送信し、テキストエリアとして focus_area と success_metrics を入力します。

ただし、オブジェクトの特殊文字を正しく解析できません。

たとえば、「Ke da\nMetrics」は「Ke da Metrics」のようになります。

私はすでにそれをエンコードしたり、文字を置き換えたりしようとしましたが、効果はありませんでした。

ヒントはありますか?

文字列化後のオブジェクト全体:

{
    "id": "433",
    "coach_id": "172",
    "organization_id": "33",
    "user_id": "809",
    "start_date": "0202-02-02",
    "sessions_allotment": "5",
    "sessions_frequency": "TwiceAMonth",
    "sessions_frequency_other": "None",
    "tags": "KeTag,SanJose",
    "focus_area": "\\' \\\" Ke da\\nMetrics",
    "success_metrics": "\\\"Calm\\\"",
    "organization_level": "Grand P",
    "bill_rate": "34",
    "first_name": "Ke",
    "last_name": "Da",
    "email": "keda@mailinator.com",
    "coach_first_name": "Dawn",
    "coach_last_name": "Gilbert"
}

ここにコンソールログがありますhttp://screenshu.com/static/uploads/temporary/6n/0n/f2/2vt72y.jpg

4

2 に答える 2

0

解決策の1つは、ディレクティブでJavaScript関数を使用し、入力JSONオブジェクトからすべての不要な文字を削除/置換/ ...すべての不要な文字を削除/置換するフィルターメソッドを使用することです(たとえば、スペースで削除\nまたは置換\nします。これは正規表現を使用して実行できます)

より多くのフィルタリング関数(それぞれが特定のタイプのフィルタリングを実行する)を作成し、それらをディレクティブを使用して関数にチェーンすることができます。

フィルタメソッドが呼び出され、と仮定するfilter(arg)otherFilter(arg)、ディレクティブは次のようになります。

$('#new-client').directives({
    '#client-email@value' : function(arg) { 
         return filter(arg.context.email); 
    },
    '#client-focus' : function(arg) { 
         return filter(arg.context.focus_area); 
    },
    '#client-success' : function(arg) { 
         return otherFitler(filter(arg.context.success_metrics)); 
    }
}).render(myObject);

それがお役に立てば幸いです。

于 2013-01-18T14:39:39.900 に答える
0

\n は Unix の行末です。

行末があなたが望むものであるかどうかはわかりませんが、\"Calm\" と同じように出力されます:

"Calm"

次に、「Ke da\nMetrics」は次のように表示されます。

Ke da
Metrics

したがって、あなたの場合、値に行末がある理由を見つけるためにマンハントを行わずに、次のコードを使用できます。

myObject.focus_area = myObject.focus_area.replace(/\n/g, '');
$('#new-client').directives({
    '#client-email@value' : 'email',
    '#client-focus' : 'focus_area',
    '#client-success' : 'success_metrics'
}).render(myObject);

私が言うように-問題はあなたの値のサーバーエンコーディングにあります-理想的にはJSONには\nが含まれていません.


上記について考えてみてください-おそらくUTF8の問題です-上記の悪い答えで申し訳ありません...

エンコーディングとして utf8 を使用して JSON を読み込もうとすると、改行がまだ表示されますか?

于 2012-09-22T13:39:21.010 に答える