在Javascript/jQuery中解析PHP序列化数组

Parse PHP serialized array in Javascript/jQuery

本文关键字:PHP 序列化 数组 Javascript jQuery      更新时间:2023-09-26

数据通过PHP写入html文件,如下所示:

$data = json_decode(stripslashes($_POST['data']));
if($data[0]!=''){
    $_SESSION['chatCode'] = $data[2];
    $fp = fopen('../sessions/chats/log_'.$data[2].'.html', 'a');
    $content = array(
        'author' => $data[1],
        'message' => $data[0],
        'time' => date('H:i:s'));
    fwrite($fp,serialize($content));
    fclose($fp);
}

然而,我正在努力在jQuery中解析序列化的数据客户端。我现在的代码是这样的:

$.get('sessions/chats/log_'+chatCode+'.html', function(data){
    $('#chatContent').html(makePretty(data));
}
function makePretty(html){
    var data = JSON.stringify(html);
    console.log(data);
    var content = '';
    for(i=0; i < data.length; i++){
        content += '<div class="msgln">'+
            '<div class="meta">'+
                '<span class="name">'+data[i]['author']+'</span>'+
                '<span class="time">'+data[i]['time']+'</span>'+
            '</div>'+
            '<div class="msg">'+data[i]['message']+'</div>'+
        '</div>';
    }
    return content;
}

日志文件log_test.html包含:

a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"09:23:23";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"09:26:39";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"09:37:03";}

控制台日志:

"a:3:{s:6:'"author'";s:5:'"e297f'";s:7:'"message'";s:4:'"test'";s:4:'"time'";s:8:'"09:23:23'";}"

那是因为你是serialize($content)数据和写它。相反,尝试json_encode($content)并编写它。这应该与您当前的jQuery代码工作。

改变
fwrite($fp,serialize($content));

fwrite($fp,json_encode($content));

写入序列化数组是不好的做法,您必须使用json_encode将数据保存到文件中:

fwrite($fp,json_encode($content));

和在ajax中获取数据,而不是使用JSON.stringify使用:

JSON.parse(dataString);