JSON массив и из MySql. Сохранение и циклы

0
<?
$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 = new Array();

//javascript function loop (не показан) генерирует vars и толкает новый массив.

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

типа "Да", ": [{ "ifeid": 1, "ANS": "Да", "тип": "SkipTo", "цель": "2"}, { "ifeid": 2, "ANS" ":" SkipTo", "цель": "5"}]

//...but, когда PHP echos это только это выходит: 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
}
  • 0
    Проверьте свою запись в БД. Это действительно [{"ifeid":1,"ans":"Yes","type":"SkipTo","target":"2"},{"ifeid":2,"ans":"Yes","type":"SkipTo","target":"5"}] ? Также вам нужно декодировать то, что размещено в вашем посте php.
  • 0
    Сохраняется в записи БД: [{"ifeid": 1, "ans": "Yes", "type": "SkipTo", "target": "2"}, {"ifeid": 2, "ans" : "Да", "тип": "SkipTo", "target": "5"}] Я не могу заставить его отобразить его в новом массиве. Я использовал JSON.stringify и отправил на пост php, где он не декодируется, но все еще сохраняется.
Показать ещё 6 комментариев
Теги:

1 ответ

0

Это гарантирует, что ваш массив объектов будет правильно закодирован - jQuery не будет кодировать URL-адрес для вас.

var posturl = "myurl?event=save&saved_logic_dialog=" + encodeURIComponent(saved_logic_dialog);
  • При сохранении в БД - проверьте, правильно ли выбрано значение (поскольку оно обязательно содержит кавычки);
  • Повторяя значение обратно в HTML - используйте htmlspecialchars($cl) чтобы правильно htmlspecialchars($cl) символы, которые могут иметь особое значение в HTML.
  • Прежде чем использовать значение в JavaScript, используйте JSON.parse(cl) для преобразования из String в Array.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню