javascript - 与 MySql 之间的 JSON 数组。保存和循环
问题描述
<?
$cl = $row["saved_json_string_column"];
?>
期待 db 查询的这个输出来创建一个新数组
//cl = '[{"ifeid":1,"ans":"Yes","type":"SkipTo","target":"2"},{"ifeid":2,"ans":"Yes","type":"SkipTo","target":"5"}]';
cl = '<? echo $cl;?>';
// 我想从保存的 'cl' 数组开始并将新项目推送到它。
skptoQarry = 新数组();
//javascript 函数循环(未显示)生成变量并推送到新数组。
thisItem_eid = 1;
yes_no_is_this = 'No';
SkipToTartgetEID = 5;
var skptoQarry_temp = {
"ifeid" : thisItem_eid,
"ans" : yes_no_is_this,
"type" : "SkipTo",
"target" : SkipToTartgetEID
};
skptoQarry.push(skptoQarry_temp);
cl = JSON.stringify(skptoQarry); //for ajax post to php for saving
//这是通过ajax post保存的数据库
[{"ifeid":1,"ans":"Yes","type":"SkipTo","target":"2"},{"ifeid":2,"ans":"Yes","type ":"SkipTo","target":"5"}]
//...但是当 PHP 回显它时,只会出现: cl = "[,]" // 我认为我保存错误或以错误的方式回显列数据。
//从mysql读取文本并在需要的地方追加。
cl = $.parseJSON(cl);
jQuery.each(cl, function (i) {
jQuery.each(this, function (key, value) {
if (key == "ifeid") {
$('div').append('if this id: '+value+'<br>');
} else if (key == "ans") {
$('div').append('is: '+value+'<br>');
} else if (key == "type") {
$('div').append('then: '+value+'<br>');
} else if (key == "target") {
$('div').append('this id: '+value+'<br><br>');
}
});
});
function saveit(){
saved_logic_dialog = JSON.stringify(skptoQarry);
var posturl = "myurl?event=save&saved_logic_dialog="+saved_logic_dialog;
jQuery.ajax({
traditional: true,
type: "POST",
url: posturl,
success: function(data) {
//messages and stuff
}
});
}
//php
$loadvfsql = "SELECT `saved_logic_dialog` FROM `questions` WHERE `id` = '{$id}' ORDER BY `questions`.`question_order` ASC";
$loadv_result=mysql_query($loadvfsql);
while($rows=mysql_fetch_array($loadv_result)){
$clc = $rows['current_logic_cont'];
$cl = $rows['saved_logic_dialog'];
//more stuff
}
解决方案
这将确保您的对象数组被正确编码 - jQuery 不会为您编码 URL。
var posturl = "myurl?event=save&saved_logic_dialog=" + encodeURIComponent(saved_logic_dialog);
- 保存到数据库时 - 检查是否正确转义值(因为它肯定会包含引号);
- 将值回显到 HTML 中时 - 用于
htmlspecialchars($cl)
正确转义可能在 HTML 中具有特殊含义的符号。 - 在 JavaScript 中使用值之前 - 用于
JSON.parse(cl)
将字符串转换为数组。