所以我有一个ruby对象:
PAGE_SIZES = {
letter_size: { width: '51em', height: '51em' },
half_letter_size: { width: '51em', height: '33em' },
custom: { width: '42em', height: '51em' }
}
和一个getter方法:
def page_sizes
PAGE_SIZES.to_json
end
和页面中相应的JS函数:
var pageSizes = JSON.parse("#{@bulletin_setting.page_sizes}");
但是字符串是用未转义的引号发送的:
console.log (JSON.parse("{"letter_size":{"width":"51em","height":"51em"},"half_letter_size":{"width":"51em","height":"33em"},"custom":{"width":"42em","height":"51em"}}"));
给了我一个错误:
SyntaxError: missing ) after argument list
我尝试使用单引号gsubing所有双引号:
console.log (JSON.parse("{'letter_size':{'width':'51em','height':'51em'},'half_letter_size':{'width':'51em','height':'33em'},'custom':{'width':'42em','height':'51em'}}"));
但那并没有奏效。我必须遗漏一些非常明显的东西,这应该很简单。
mu太短标记为重复。问题是相同的(JS字符串中未转义的双引号),但上下文不同。要使用unescape_javascript方法,您需要在控制器中使用include,因为该方法适用于视图。所以我觉得gsub方法是一个更清洁的实现。但那只是我的意见。
......以及这对我有用的东西:
PAGE_SIZES = {
'margin' => { 'top' => '0.5', 'bottom' => '0.5', 'left' => '0.5', 'right' => '0.5' },
'letter_size' => { 'width' => '8.5', 'height' => '11' },
'half_letter_size' => { 'width' => '5.5', 'height' => '8.5' },
'custom' => { 'width' => '7', 'height' => '8.5' },
}
def page_sizes
PAGE_SIZES
end
var pageSizes = $.parseJSON("#{j @bulletin_setting.page_sizes.to_json}");
答案 0 :(得分:0)
JSON.parse
不接受单引号所包含的键(和值)。你应该使用双引号。
JSON.parse("{'letter_size':{'width':'51em', 'height': '51em'}}")
// Uncaught SyntaxError: Unexpected token ' in JSON at position 1(…)
JSON.parse('{"letter_size":{"width":"51em", "height": "51em"}}');
// Object {letter_size: Object}