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

\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 回答
0

一种解决方案是使用带有指令的 JavaScript 函数并使用一些过滤方法从输入 JSON 对象中删除/替换/ ...所有不需要的字符(例如,删除\n或替换\n为空格;这可以使用正则表达式来完成)

您可以拥有更多过滤功能(每个功能都执行特定类型的过滤)并将它们链接到带有指令的功能中。

假设您的过滤器方法将被调用filter(arg)and 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 回答