0

私のサイトには、ちょっとしたチャット/サポート フィールドが必要です。現時点では、データベースに書き込んで保存することもできます。

しかし、サイトを再度開くと、古いテキストがデータベースから取得されるようにしたいと考えています。しかし、それを行う最善の方法は何ですか?また、データベースからすべてのデータではなく 1 つのデータしか返されないため、Array は false だと思います。

私のjavascriptテストコード:

    initChat: function () {

                var cont = $('#chats');
                var list = $('.chats', cont);
                var form = $('.chat-form', cont);
                var input = $('input', form);
                var btn = $('.btn', form);

                var handleClick = function (e) {
                    e.preventDefault();

                    var text = input.val();
                    if (text.length == 0) {
                        return;
                    }

                    var time = new Date();
                    var time_str = time.toString('dd.MM.yyyy - H:mm')+ " Uhr";
                    var tpl = '';
                    tpl += '<li class="out">';
                    tpl += '<img class="avatar" alt="" src="assets/img/avatar.png"/>';
                    tpl += '<div class="message">';
                    tpl += '<span class="arrow"></span>';
                    tpl += 'Meine Frage&nbsp;';
                    tpl += '<span class="datetime">vom ' + time_str + '</span>';
                    tpl += '<span class="body">';
                    tpl += text;
                    tpl += '</span>';
                    tpl += '</div>';
                    tpl += '</li>';

                    var msg = list.append(tpl);

                    var time_str_new = time.toString('yyyy-MM-dd H:mm:ss');             

                    $.ajax({                                      
                    type: "POST",                                    
                    url: '../support.php',
                    data: {datum: time_str_new, text: text},
                    dataType: 'json',
                    success: function(data)
                    {
                    input.val("");
                    }
                    });

                    $('.scroller', cont).slimScroll({
                        scrollTo: list.height()
                    });
                }

私のphpテストスクリプト:

$kundenid = KUNDENID;

$query = "INSERT INTO support set datum = '$datum', kunde = '$kundenid', text = '$text', typ = 'kunde'";
$result = mysql_query($query,$db);

$querysup = "SELECT id, datum, kunde, text, typ FROM support WHERE kunde = '$kundenid'";
$resultsup = mysql_query($querysup,$db);

while($rowsup = mysql_fetch_array($resultsup)) {
$datum = $rowsup['datum'];
$text = $rowsup['text'];
$typ = $rowsup['typ'];

$data = array("datum"=>$rowsup['datum'], "text"=>$rowsup['text'], "typ"=>$rowsup['typ']);
}

echo json_encode($data);

さて、私はこのコードを持っています。新しいテキストを投稿すると、データベースからのすべての投稿が表示されます。しかし、最初の投稿の前に mysql からのデータがまだ残っている必要があります。

    initChat: function () {

        var cont = $('#chats');
        var list = $('.chats', cont);
        var form = $('.chat-form', cont);
        var input = $('input', form);
        var btn = $('.btn', form);

        var handleClick = function (e) {
            e.preventDefault();

            var text = input.val();
            if (text.length == 0) {
                return;
            }

            var time = new Date();
            var time_str = time.toString('dd.MM.yyyy - H:mm')+ " Uhr";
            var tpl = '';
            tpl += '<li class="out">';
            tpl += '<img class="avatar" alt="" src="assets/img/avatar.png"/>';
            tpl += '<div class="message">';
            tpl += '<span class="arrow"></span>';
            tpl += 'Meine Frage&nbsp;';
            tpl += '<span class="datetime">vom ' + time_str + '</span>';
            tpl += '<span class="body">';
            tpl += text;
            tpl += '</span>';
            tpl += '</div>';
            tpl += '</li>';

            var msg = list.append(tpl);

            var time_str_new = time.toString('yyyy-MM-dd H:mm:ss');             
            $.ajax({                                      
            type: "POST",                                    
            url: 'support.php',
            data: {datum: time_str_new, text: text},
            dataType: 'json',
            success: function(data)
            {
            var myArray = data;
            for (var i = 0; i < myArray.length; i++) {

            var datum = new Date(myArray[i].datum);

            var tpl = '';
            tpl += '<li class="out">';
            tpl += '<img class="avatar" alt="" src="assets/img/avatar.png"/>';
            tpl += '<div class="message">';
            tpl += '<span class="arrow"></span>';
            tpl += 'Meine Frage&nbsp;';
            tpl += '<span class="datetime">vom ' + datum.toString('dd.MM.yyyy - H:mm:ss')+ ' Uhr' + '</span>';
            tpl += '<span class="body">';
            tpl += myArray[i].text;
            tpl += '</span>';
            tpl += '</div>';
            tpl += '</li>';
            var msg = list.append(tpl);
            }
            }
            });
4

1 に答える 1

0

しかし、配列からJavaScriptにロードする方法...したがって、ページを更新すると、配列の値が「チャットボックス」に表示されます

欠落している部分は、次のような単純な「割り当て」操作である可能性があります

var chatArr=<?PHP echo json_encode($data) ?>;

この<script type="language/JavaScript">セクションは、ドキュメント内のすべての PHP を処理した後に挿入できます。もちろん、「不要な」ものが $data に入らないようにする必要があります。$(function(){...})その後、ドキュメント内の別の場所にあるセクションで、JavaScript 配列/オブジェクトに対してやりたいことを何でも行うことができます。

もちろん、Date オブジェクトも処理する専用の JSON パーサーもあります。単純な割り当てでは、JavaScript オブジェクトに文字列または数値コンテンツのみが生成されます。こちらを参照してください。

于 2013-07-27T13:03:16.973 に答える