【问题标题】:JSON array to and from MySql. Saving and Looping与 MySql 之间的 JSON 数组。保存和循环
【发布时间】:2018-07-03 07:30:39
【问题描述】:
<?
$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
}

【问题讨论】:

  • 检查您的数据库记录。真的是[{"ifeid":1,"ans":"Yes","type":"SkipTo","target":"2"},{"ifeid":2,"ans":"Yes","type":"SkipTo","target":"5"}] 吗?您还需要解码发布到您的 php 发布文件的内容。
  • 保存在数据库记录的是:[{"ifeid":1,"ans":"Yes","type":"SkipTo","target":"2"},{" ifeid":2,"ans":"Yes","type":"SkipTo","target":"5"}] 我无法让它回显到新数组中。我使用 JSON.stringify 并将其发送到未解码但仍在保存的 php post。
  • 试试cl = '&lt;? echo json_encode($cl);?&gt;';
  • cl "[,]" 的结果相同
  • 这可能是 mysqli 逻辑错误,您可以发布您的获取逻辑吗?

标签: javascript php mysql json


【解决方案1】:

这将确保您的对象数组被正确编码 - jQuery 不会为您编码 URL。

var posturl = "myurl?event=save&saved_logic_dialog=" + encodeURIComponent(saved_logic_dialog);
  • 保存到 DB 时 - 检查是否正确转义了值(因为它肯定会包含引号);
  • 将值回显到 HTML 时 - 使用 htmlspecialchars($cl) 正确转义可能在 HTML 中具有特殊含义的符号。
  • 在 JavaScript 中使用值之前 - 使用 JSON.parse(cl) 将字符串转换为数组。

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2016-10-05
    相关资源
    最近更新 更多