невозможно распечатать массив, возвращенный AJAX с JavaScript - PullRequest
1 голос
/ 22 февраля 2011
function getWriters(cat, lev, id)   
{
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)

        {

            document.getElementById("writer").innerHTML = xmlhttp.responseText;
            var writer = eval(xmlhttp.responseText);
            document.write(writer)
        }


    }

    xmlhttp.open("GET", "order.php?op=2&id=0&cat=" + cat + "&lev=" + lev, true);
    xmlhttp.send();


}

xmlhttp.responseText возвращает

Array ( [0] => Array ( [name] => Unassigned [user_id] => 2 [writing_level] => [writing_category] => ) [1] => Array ( [name] => arsalan [user_id] => 3 [writing_level] => [writing_category] => ) [2] => Array ( [name] => Shazia [user_id] => 4 [writing_level] => [writing_category] => ) [3] => Array ( [name] => janea [user_id] => 5 [writing_level] => [writing_category] => ) [4] => Array ( [name] => s [user_id] => 6 [writing_level] => [writing_category] => ) [5] => Array ( [name] => iuiui [user_id] => 8 [writing_level] => [writing_category] => ) [6] => Array ( [name] => demo [user_id] => 9 [writing_level] => [writing_category] => ) [7] => Array ( [name] => wewe [user_id] => 10 [writing_level] => [writing_category] => ) [8] => Array ( [name] => Muhammad Zoyeb [user_id] => 11 [writing_level] => [writing_category] => ) [9] => Array ( [name] => Atif Rauf Alvi [user_id] => 12 [writing_level] => [writing_category] => ) [10] => Array ( [name] => demo-1 [user_id] => 13 [writing_level] => [writing_category] => ) [11] => Array ( [name] => ffff** [user_id] => 14 [writing_level] => High School,Masters [writing_category] => Literature and Language,Social Sciences ) ) 

Я получаю синтаксическую ошибку в document.write (writer);если я удаляю eval (), синтаксическая ошибка отсутствует.

Может кто-нибудь объяснить, как исправить этот или какой-либо другой способ преобразования возвращаемой строки в массив.

Спасибо

Ответы [ 3 ]

3 голосов
/ 22 февраля 2011

Строка, возвращаемая с сервера, не соответствует синтаксису JSON или JavaScript, поэтому вы не можете передать ее на eval().Похоже, вы используете функцию PHP print_r в массиве на сервере - вам нужно использовать json_encode (PHP> 5.2):

echo json_encode($myArray);

Тогда вы можетепроанализируйте его локально с помощью JSON.parse (рекомендуется) или eval.

0 голосов
/ 22 февраля 2011

Вы возвращаете PHP «представление» массива, и, оценивая эту строку, вы попадаете в синтаксическую ошибку.

Попробуйте это:

  • Возвращает массив из PHP в виде строки, разделенной запятыми
  • Разбить строку в JS и поместить ее в массив (если вам нужен массив JS, иначе выведите его и остановите)

Чтобы разбить строку, используйте:

var response = xmlhttp.responseText;
var responseArray = response.split(",");
0 голосов
/ 22 февраля 2011

Похоже, ваш ответ JSON является строковой версией массива PHP.Почему бы не вернуть JSON из вашего PHP, тогда Javascript сам подберет массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...