在页面加载时,我遇到了解析从php返回的JSON字符串的问题。奇怪的是,如果我对同一个函数发出ajax请求,它就会进行分析,而不会出现任何错误。
当我尝试这样做的时候,问题就发生了。
JSON.parse('{"products":[{"id":"1","name":"Batata Frita ","description":"<p>Batata ta<strong> frita <\/strong><strong>pizza<\/strong><\/p>","short_description":"Batata ta frita","type":"food","category_id":"1","price":"15.00","inventory":"100","image":"\\tmp\\catalog\\productmenu\\batata_frita_sequinhaaa_1.jpg","options":"[{\"is_delete\":\"\",\"previous_type\":\"\",\"previous_group\":\"\",\"id\":\"1\",\"option_id\":1,\"title\":\"Molhos\",\"type\":\"drop_down\",\"is_require\":\"1\",\"values\":[{\"option_type_id\":0,\"is_delete\":\"\",\"title\":\"Ketchup\",\"price\":\"5\",\"sku\":\"\",\"sort_order\":\"\"}]},{\"is_delete\":\"\",\"previous_type\":\"\",\"previous_group\":\"\",\"id\":\"2\",\"option_id\":2,\"title\":\"Adicionais\",\"type\":\"checkbox\",\"is_require\":\"1\",\"values\":{\"1\":{\"option_type_id\":1,\"is_delete\":\"\",\"title\":\"Cebola\",\"price\":\"2\",\"sku\":\"\",\"sort_order\":\"\"},\"2\":{\"option_type_id\":2,\"is_delete\":\"\",\"title\":\"Queijo\",\"price\":\"5\",\"sku\":\"\",\"sort_order\":\"\"}}},{\"is_delete\":\"\",\"previous_type\":\"\",\"previous_group\":\"\",\"id\":\"3\",\"option_id\":3,\"title\":\"Teste\",\"type\":\"field\",\"is_require\":\"1\",\"price\":\"5\",\"price_type\":\"fixed\",\"sku\":\"\",\"max_characters\":\"\"},{\"is_delete\":\"\",\"previous_type\":\"\",\"previous_group\":\"\",\"id\":\"4\",\"option_id\":4,\"title\":\"Hor\\u00e1rio de entrega\",\"type\":\"date_time\",\"is_require\":\"1\",\"price\":\"10\",\"sku\":\"\"}]","barcode":"77373737737","store_ids":"2","seller_id":"67","status":"1","image_path":"http:\/\/192.100.2.109\/test\/media\/\\tmp\\catalog\\productmenu\\batata_frita_sequinhaaa_1.jpg"},{"id":"2","name":"Pizza","description":"<p>Pizza 30cm<\/p>","short_description":"Pizza 30cm","type":"food","category_id":"2","price":"44.00","inventory":"200","image":"\\tmp\\catalog\\productmenu\\pizzadem.jpg","options":"[{\"is_delete\":\"\",\"previous_type\":\"\",\"previous_group\":\"\",\"id\":\"1\",\"option_id\":1,\"title\":\"Sabor 1\",\"type\":\"drop_down\",\"is_require\":\"1\",\"values\":[{\"option_type_id\":0,\"is_delete\":\"\",\"title\":\"Calabresa\",\"price\":\"10\",\"sku\":\"\",\"sort_order\":\"\"},{\"option_type_id\":1,\"is_delete\":\"\",\"title\":\"Muzzarela\",\"price\":\"5\",\"sku\":\"\",\"sort_order\":\"\"}]},{\"is_delete\":\"\",\"previous_type\":\"\",\"previous_group\":\"\",\"id\":\"2\",\"option_id\":2,\"title\":\"Sabor 2\",\"type\":\"drop_down\",\"is_require\":\"1\",\"values\":{\"2\":{\"option_type_id\":2,\"is_delete\":\"\",\"title\":\"Bacon\",\"price\":\"15\",\"sku\":\"\",\"sort_order\":\"\"},\"3\":{\"option_type_id\":3,\"is_delete\":\"\",\"title\":\"Muzzarela\",\"price\":\"10\",\"sku\":\"\",\"sort_order\":\"\"}}}]","barcode":"324324","store_ids":"2","seller_id":"67","status":"1","image_path":"http:\/\/192.100.2.109\/test\/media\/\\tmp\\catalog\\productmenu\\pizzadem.jpg"},{"id":"3","name":"Agua","description":"<p>Agua 500ml<\/p>","short_description":"Agua 500ml","type":"drink","category_id":"3","price":"5.00","inventory":"200","image":"\\tmp\\catalog\\productmenu\\Download.jpg","options":null,"barcode":"324324234234","store_ids":"2","seller_id":"67","status":"1","image_path":"http:\/\/192.100.2.109\/test\/media\/\\tmp\\catalog\\productmenu\\Download.jpg"}],"categories":[{"id":"1","name":"Aperitivos","icon":"A","sort_order":"0","seller_id":"67"},{"id":"2","name":"Pizzas","icon":"P","sort_order":"1","seller_id":"67"},{"id":"3","name":"Bebidas","icon":"B","sort_order":"3","seller_id":"67"}]}')上面的JSON字符串来自PHP,如下所示:
function initializeData() {
initialData = JSON.parse('<?php echo Mage::helper('module/endpoint')->getData(); ?>')
...即使JSON是有效的和经过测试的( JSON Validator ),它还是返回这个错误:
VM3617:1 Uncaught SyntaxError: Unexpected token c in JSON at position 248
at JSON.parse (<anonymous>)
at <anonymous>:1:6但是,如果向我的服务器发出ajax请求并对其进行解析(返回的数据是完全相同的字符串):
jQuery.ajax({
type: "POST",
url: '<?php echo Mage::getUrl('module/enpoint/getData') ?>',
data: {id: sellerId, store_id: storeId},
success: function (data) {
data = JSON.parse(data)
...它工作正常,没有任何错误。
我是不是漏掉了什么?这种行为的目的是什么?
发布于 2020-08-20 17:53:25
我是不是漏掉了什么?
处理字符串时的一个常见概念是转义序列。这些是表示单个字符的多字符序列.
当你嵌套有这个概念的多个“语言”时,事情就变得棘手了。在您的例子中: JSON和JavaScript字符串文本。
这是有效的JSON:
{"value": "\\c"}序列"\\c"由JSON解析器处理,并将其转换为值\c。在JSON中,\\是单个\的转义序列。
但是,如果将相同的值放入JavaScript字符串文本中,则会开始崩溃:
'{"value": "\\c"}'由于\也是字符串文本中的转义字符,因此从此字符串文本创建的字符串值为:
{"value": "\c"}与JSON一样,在JavaScript字符串中,\\是单个\的转义序列。
如果这个值现在传递给JSON解析器,它会看到"\c",这不是一个有效的转义序列,因此解析器会抛出一个错误。
但是如果向我的服务器发出ajax请求并解析它..。它工作正常,没有任何错误。
因为在本例中没有字符串文本。传递给JSON.parse的字符串值实际上包含在JSON中有效的字符序列\\c。
https://stackoverflow.com/questions/63510487
复制相似问题