我能够使用jQuery的'$ .parseJSON();'成功解析用JSON手动初始化的变量。但我无法使用使用数组构造的相同JSON格式解析变量。
的Javascript
var questionstype = [];
var questionshtml = [];
var questionsquestion = [];
//Store all questions, types, and html for each fieldset into 3 separate arrays
for(var i=1;i<=formpreviewid;i++)
{
questionsquestion.push($("#formelement_"+i + " legend").text());
questionstype.push($("#formelement_"+i).attr("class"));
questionshtml.push($("#formelement_"+i)[0].outerHTML);
};
//alert(questionsquestion[1] + questionstype[1] + questionshtml[1]);
//format values for each fieldset into values format in mysql
var questionsvalues = [];
var index = 0;
for(var i=1;i<=formpreviewid;i++)
{
questionsvalues.push('{"question":"'+questionsquestion[index]+'","type":"'+questionstype[index]+'","html":"'+questionshtml[index]+'"}');
index++;
};
//alert(questionsvalues);
//questionsvalues = questionsvalues.replace("}{", "},{");
//alert(questionsvalues);
//format mysql values into JSON format
var questionsvaluesjson = '{"questions":['+questionsvalues+']}';
使用具有相同JSON格式的手动构造的字符串变量 -
var questionsquestion2 = '{"questions":[{"question":"test16","type":"radio", "html":"<input>"},{"question":"test2","type":"checkbox", "html":"<input>"},{"question":"test3","type":"checkbox", "html":"<input>"}]}';
ParseJSON(questionsvaluesjson); //works fine
使用从数组构造的字符串 -
var questionsvaluesjson = '{"questions":['+questionsvalues+']}';
Alert(questionsvaluesjson) :
{"questions":[{"question":"d","type":"radio","html":"<fieldset id="formelement_1" class="radio"><tr><td colspan="2"><legend>d</legend></td></tr><tr><td><label for="1_1">d</label></td><td><input name="radio1" value="d" type="radio"></td></tr><tr><td><label for="1_2">d</label></td><td><input name="radio1" value="d" type="radio"></td></tr></fieldset>"}]}
ParseJSON(questionsvaluesjson); //Breaks script
我将此JSON发送到要解码的php文件,然后在foreach循环中使用,我可以操作对象将数据插入到mysql数据库中,但是当前尝试使用对象时会抛出错误foreach循环。
这是错误:'试图获取非对象的属性'
以下是代码:
PHP
foreach ($theArray->questions as $data)
{
$insert .= '("' . $data->question . '", "' . $data->type . '", "' . $data->html . '")';
}
$insert = str_replace(")(","),(",$insert);
$query = "INSERT INTO registrationquestions (question, type, html) VALUES " . $insert;
$mysqli->query($query);
答案 0 :(得分:0)
你的html字符串中有引号:
"html":"<fieldset id="formelement_1" class="radio">
这完全被破坏了(字符串值以id="
结束)。
您需要使用\"
转义引号。
编辑:当然这是“为什么它不起作用”的答案。更好的方法是使用JSON.stringify序列化你的对象,这会解决这个问题和其他问题,正如Kevin的评论中所建议的那样。