разобрать список Json и добавить - PullRequest
0 голосов
/ 14 февраля 2012

Я пытался в основном создать div для каждой строки списка json, возвращаемого через ajax, который добавлялся бы к основному div #chatcontents. Тем не менее, я сталкиваюсь с проблемами с правильным синтаксисом. Я думаю, что ошибка в том, как возвращается мой json.

Это функция, которая выполняет вызов ajax в index.php

function returnValue()
{
 $.ajax({
            async: true,
            type: "GET",
            url: "thread.php",
            data: {lastposted : dateposted},

            success: function (json) {
                if(json)
                {
                for (var i = 0, len = json.length; i < len; ++i) {
                var results = json[i];
                var newDiv = $("<div>" + results.1 + results.2  "</div>");
                }

                   $('#chatContents').append(newDiv);             
                }
            }  
        });
}

thread.php возвращает результат Json, подобный этому.

[{"0":"something","1":"41234","2":"test"},
{"0":"somethingmore","1":"2131","2":"test2"}]

Кажется, что коды, которые я видел в Интернете, возвращают ключ, но мои в цифрах (0,1,2). Я думаю, потому что я вернул массив. Это 2D-массив, который был преобразован в JSON. Я не уверен, если это вызывает проблему относительно того, как я перебираю массив на первой странице. Любая помощь будет оценена.

Для более четкого изображения: Файл thread.php имеет следующий код:

<META HTTP-EQUIV="Refresh" CONTENT="3">
<?php
$latestmsgs = retrieveNewMsgs($lastpost,$currtime);
  ?>

 <?php echo json_encode($latestmsgs);?>

Итак, по сути, thread.php обновляется каждые 3 секунды. Index.php выполняет ajax-вызов на эту страницу, получает последнее сообщение в форме json и добавляет.

Надеюсь, понятнее.

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Ваш thread.php возвращает массив строк JSON ... вам нужно зациклить массив и затем проанализировать каждую строку, чтобы получить объект.

for (var i = 0, len = json.length; i < len; ++i) {
  var results = JSON.parse(json[i]);
  var newDiv = $("<div>" + results['1'] + results['2']  "</div>");
}
0 голосов
/ 14 февраля 2012

Я думаю, results.1 неверный синтаксис, вы должны использовать results[1].

EDIT

  1. В этой строке есть синтаксические ошибки (кроме скобочного синтаксиса вместо точек у вас отсутствует знак плюс):

    var newDiv = $("<div>" + results.1 + results.2  "</div>");
    

    Это должно быть

    var newDiv = $("<div>" + results[1] + results[2] + "</div>");
    
  2. Убедитесь, что ваш обратный вызов получает проанализированный объект JSON, а не необработанную строку JSON. Оповещение typeof json внутри обратного вызова, оно должно сказать «объект». Если написано «строка», добавьте dataType: 'json' к объекту параметров, переданному в $.ajax, и / или убедитесь, что сервер устанавливает правильный тип содержимого для ответа.

  3. Как только вы исправите это, ваш код должен работать. Смотрите этот jsfiddle .

РЕДАКТИРОВАТЬ 2

  1. Строка с .append должна быть внутри вашего цикла for, в противном случае к div будет добавлен только последний результат в JSON. См. обновленная скрипка .

  2. Вы сказали в комментариях: "Я добавляю в class =" container "div". Но ваш код говорит, что вы добавляете в div с ID == "chatContents". У тебя есть такой div?

  3. Когда вы говорите, что предупреждение перестало работать, это означает, что перед предупреждением, вероятно, есть какая-то ошибка, мешающая выполнению остальной части скрипта. Проверьте консоль Firebug на наличие ошибок и перепроверьте весь код перед предупреждением.

...