是否可以获取变量的内容并将其粘贴到这样的数组中(我试图无济于事):
首先,我从数据库中获取这些值,并将php表单用于隐藏输入:
{value: '1', name: 'name1'},{value: '2', name: 'name2'}
然后用javascript收集
document.getElementById("myelement").value
然后输入值
var meval = document.getElementById("myelement").value;
然后我尝试像这样构建数据:
var data = {items: [meval]};
如果我这样做
var data = {items: [{value: '1', name: 'name1'},{value: '2', name: 'name2'}]};
它有效,但不是变量的初始方式。我必须建立这样的原始数据。
答案 0 :(得分:2)
如果您使用字符串,则可以使用eval() - 但它有点顽皮,因为它引入了安全性和安全性。流动问题。
var meval =“[{value:'1',name:'name1'},{value:'2',name:'name2'}]”;
var data = eval(meval);
答案 1 :(得分:2)
eval()
是邪恶的!请改用JSON.parse()
。
var data = {items: JSON.parse('['+meval+']')};
如果您的网站上包含jQuery,则可以$.parseJSON()
在旧版浏览器上运行效果更佳。
答案 2 :(得分:2)
Eric是对的,你通常比使用任意JavaScript文字更好地使用JSON。目前,您的文字不是有效的JSON,因为它不使用双引号属性名称和字符串值。使用json_encode
获取与JSON兼容的文字语法。
当eval()
不可用时,您可以像其他答案一样回退到JSON.parse
,但是您需要使用额外的括号来确保eval
知道前导{
1}}表示对象文字,而不是语句。
<?php
function js($s) { // shortcut to save some typing
echo json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT|JSON_HEX_APOS);
}
$data= array(name=>$row['name'], value=>$row['value']);
?>
<input type="hidden" id="data" value="<?php js($data); ?>"/>
<script type="text/javascript">
var json= document.getElementById('data').value;
var data= 'JSON' in window? JSON.parse(json) : eval('('+json+')');
</script>
实际上JSON_HEX
函数中的js
选项允许以在HTML属性或<script>
块中同样有效的方式输出文字,因此您确实可以省略隐藏的输入,只是说:
<script type="text/javascript">
var data= <?php js($data); ?>;
</script>
答案 3 :(得分:1)
您需要评估该变量以将其内容转换为数据结构:
var data = {items: [eval(meval)]};
答案 4 :(得分:0)
将这些项目放入以下格式的隐藏输入中:
"name1"."|"."name2"."|"."name3"... and so on
然后在JS:
var list = document.getElementById("yourelement").value;
var arrayOfStuff = list.split("|");
现在你的JS数组看起来像这样:
array() {
[0] => "Name1"
[1] => "Name2"
[2] => "Name3"
... and so on
}