Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的语法错误:执行JSON.Parse时输入意外结束_Javascript_Php_Jquery_Html_Json - Fatal编程技术网

Javascript 未捕获的语法错误:执行JSON.Parse时输入意外结束

Javascript 未捕获的语法错误:执行JSON.Parse时输入意外结束,javascript,php,jquery,html,json,Javascript,Php,Jquery,Html,Json,HTML和PHP: <select id="package"> <?php $package_size_array = array('size_a' => 70, 'size_b' => 90, 'size_c' => 130); ?> <option value="size" id="<?php echo json_encode($package_size_array, JSON_PRETTY_PRINT); ?>"&

HTML和PHP:

<select id="package">
    <?php $package_size_array = array('size_a' => 70, 'size_b' => 90, 'size_c' => 130); ?>
    <option value="size" id="<?php echo json_encode($package_size_array, JSON_PRETTY_PRINT); ?>">Size</option>
    <!--Some more <option>s here...-->
</select>
问题:Chrome和其他浏览器的控制台打印:

Uncaught SyntaxError: Unexpected end of input functions.js:217
(anonymous function) functions.js:217
jQuery.event.dispatch jquery.js:4371
elemData.handle

除非转换为JSON的数据仅由布尔值或数字组成,否则生成的JSON将包含
字符

您正在使用
字符来分隔ID属性值,因此数据中的第一个字符将过早结束属性

如果您检查发送到浏览器的数据(使用
view>source
),而不是仅仅查看PHP,那么这将更加明显

您需要将JSON的文本表示形式转换为它的HTML表示形式

id="<?php echo htmlspecialchars(json_encode($package_size_array)); ?>"
id=“”
您还应该删除JSON_PRETTY_PRINT,它对调试很有用,但在实践中效率低下,并且新行不适合属性值



也就是说,使用JSON作为ID值是一个糟糕的想法。如果要在元素上存储任意数据,请使用(但仍需要将文本转换为HTML!)

除非转换为JSON的数据仅包含布尔值或数字,否则生成的JSON将包含
字符

您正在使用
字符来分隔ID属性值,因此数据中的第一个字符将过早结束属性

如果您检查发送到浏览器的数据(使用
view>source
),而不是仅仅查看PHP,那么这将更加明显

您需要将JSON的文本表示形式转换为它的HTML表示形式

id="<?php echo htmlspecialchars(json_encode($package_size_array)); ?>"
id=“”
您还应该删除JSON_PRETTY_PRINT,它对调试很有用,但在实践中效率低下,并且新行不适合属性值



也就是说,使用JSON作为ID值是一个糟糕的想法。如果您想在元素上存储任意数据,请使用(尽管您仍然需要将文本转换为HTML!)

为什么需要JSON.parse()id?您实际想用这段代码实现什么
id
只是一个字符串,不是JSON对象。因为id包含JSON编码的php数组。我想通过JavaScript和JSON非序列化来找回我的PHP数组。@David:“JavaScript对象表示法对象”?JSON从来不是一个“对象”,而是一个字符串。(吹毛求疵,我知道)语法错误是因为他在
id=“JSON”
中使用了双引号,而JSON也包含双引号,所以他的引号都是乱七八糟的。你为什么需要JSON.parse()id?你用这段代码到底想实现什么
id
只是一个字符串,不是JSON对象。因为id包含JSON编码的php数组。我想通过JavaScript和JSON非序列化来找回我的PHP数组。@David:“JavaScript对象表示法对象”?JSON从来不是一个“对象”,而是一个字符串。(吹毛求疵,我知道)语法错误是因为他在
id=“JSON”
中使用了双引号,而JSON也包含双引号,所以他的引号都是乱七八糟的。将JSON存储在
数据-*
属性中的一个好处是jQuery将自动为您解码。取出
JSON\u PRETTY\u PRINT
,我认为这会让事情变得更糟。在chrome中运行
document.getElementById('package')。选项[0]。控制台中提供的php文件上的id
,提供了预期的json。所以不一定会破坏东西,尽管我和你一样关心多行html属性在
数据-*
属性中存储JSON的好处是jQuery会自动为你解码。拿出
JSON\u PRETTY\u PRINT
,我想这会让事情变得更糟。在chrome运行
文档中,getElementById('package'))控制台中提供的php文件上的.options[0].id
提供了预期的json。虽然我和你一样关心多行html属性,但这并不一定会破坏一切