хотите передать строку JSON в переменную javascript [JSON.parse(),eval()] не работают для меня, оба возвращают непредвиденную ошибку токена

когда я повторяю свой php-массив, он отображается так

эхо json_encode ($ marray);

ОТОБРАЖЕНИЕ

{"marray":[{"широта":"12,34","длина":"76,35"},{"широта":"13,60","длина":"77,34"},{"широта":"14,45" ,"длинный":"78,70"},{"широта":"12,12","длинный":"79,47"}]}

я проверил свою json_string (выше) в онлайн-форматере json... в ней нет ошибок.

я использую ajax для получения строки json в этой переменной — xmlhttp.responseText;

если я напечатаю эту переменную, она отобразит тот же наш вывод, что и в инструкции php echo;

но если я скопирую и вставлю приведенную выше строку json напрямую (без использования ответа ajax) в переменную javascript, она отобразится

[объект Объект],[объект Объект],[объект Объект],[объект Объект]

тогда я могу использовать оператор точки для извлечения данных из него.....

я не знаю, в чем проблема, когда строка json сохраняется в переменной js в качестве ответа из файла php.

есть много тем, касающихся этого, но я все еще не могу понять свою проблему .... JSON.parse() nad eval() не работает для меня.

МОЕ PHP-кодирование...

    $sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);
$length=mysql_num_rows($result);

while($row=mysql_fetch_array($result))
{
$marray[$i] =

array(
"lat" => $row['lat'],
"long" => $row['long']
     );
$i++;
}
$dmarray=array("marray"=>$marray);
echo json_encode($dmarray);

пожалуйста, помогите мне... проблема кажется глупой, но она стоила мне 3 полных дня бессонных ночей

    <script type="text/javascript">
function displayvalue()
{
m="xxx";
     var xmlhttp;
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)
    {
var h=xmlhttp.responseText;
document.getElementById("data").innerHTML="h";
}
}
xmlhttp.open("GET","array.php?q="+m,true);
xmlhttp.send(null);
}
 </script>

person user1602452    schedule 16.08.2012    source источник
comment
Можете ли вы опубликовать код JavaScript, который вы используете для анализа JSON?   -  person Michael Sandino    schedule 16.08.2012
comment
подождите, я опубликую это спасибо за ответ на мой вопрос Майкл   -  person user1602452    schedule 16.08.2012
comment
Майкл Сандино, я добавил java-скрипт, помогите мне, пожалуйста.   -  person user1602452    schedule 16.08.2012
comment
Не уверен, что вы пытаетесь там сделать. Вы нигде не используете ответ.   -  person Michael Sandino    schedule 16.08.2012
comment
я не могу разобрать json, если я использую JSON.parse(), eval().... он отображает ошибку как неожиданный токен в json.parse   -  person user1602452    schedule 16.08.2012
comment
Не могли бы вы опубликовать этот код, пожалуйста?   -  person Michael Sandino    schedule 16.08.2012
comment
документ.getElementById(данные).innerHTML=h; он отображает {marray: [{широта: 12,34, долгота: 76,35}, {широта: 13,60, долгота: 77,34}, {широта: 14,45, долгота: 78,70}, {широта: 12,12, долгота: 79,47}]}   -  person user1602452    schedule 16.08.2012
comment
document.getElementById("data").innerHTML="h"; должно быть document.getElementById("data").innerHTML=h;.   -  person Barmar    schedule 16.08.2012
comment
если я скопирую следующий код непосредственно в переменную java-скрипта ...................................... .......... {маррай: [{широта: 12.34, долгота: 76.35}, {широта: 13.60, долгота: 77.34}, {широта: 14.45, долгота: 78.70}, {широта: 12.12, долгота :79.47}]} ...................... затем отображается [объект Объект],[объект Объект],[объект Объект],[объект Объект]   -  person user1602452    schedule 16.08.2012
comment
извините, Бармер, я опечатался... это document.getElementById(data).innerHTML=h;.   -  person user1602452    schedule 16.08.2012
comment
Если вы скопируете его в переменную Javascript без кавычек, он будет проанализирован синтаксическим анализатором Javascript.   -  person Barmar    schedule 16.08.2012
comment
Пожалуйста, покажите, как вы пытаетесь использовать JSON.parse() в коде.   -  person Barmar    schedule 16.08.2012
comment
ru, ребята, в состоянии понять мою проблему, извините, мой английский не так уж хорош .... в чем моя проблема, если строка, закодированная в json, хранится в переменной js в качестве ответа от ajax, она отображает json, как это отражено в php ... если я скопирую то, что он отразил в php, напрямую в переменную java-скрипта, я получаю [объектный объект], [объектный объект], [объектный объект], [объектный объект]....... что происходит не так, PLZ, помогите мне   -  person user1602452    schedule 16.08.2012
comment
См. json.org/js.html для простого примера анализа JSON.   -  person Barmar    schedule 16.08.2012
comment
я использую вот так var temp=JSON.parse(xmlhttp.responseText);   -  person user1602452    schedule 16.08.2012
comment
если я использую JSON.parse или eval()... моя программа останавливается в этой позиции.. если я вижу консоль, она показывает неожиданный токен в json.parse в моем файле JSON.js   -  person user1602452    schedule 16.08.2012
comment
Мое единственное предположение сейчас - проверить необработанный вывод PHP-скрипта и убедиться, что в ответе действительно нет недопустимых символов (могут быть непечатаемые).   -  person Michael Sandino    schedule 16.08.2012


Ответы (1)


Простой (и рабочий) пример тестирования для справки:

PHP:

<?php

$datastr = '{"marray":[{"lat":"12.34","long":"76.35"},{"lat":"13.60","long":"77.34"},{"lat":"14.45","long":"78.70"},{"lat":"12.12","long":"79.47"}]}';
$dataarray = json_decode($datastr);
die(json_encode($dataarray));

?>

JavaScript (html):

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function togetdata(callback) {
    var httpRequest;
    httpRequest = new XMLHttpRequest();

    httpRequest.onreadystatechange = getresponse;
        httpRequest.open('GET', "webpage.php");
    httpRequest.send();

    function getresponse() {
            if (httpRequest.readyState === 4) {
                if (httpRequest.status === 200) {
                    callback(httpRequest.responseText);
                } else {
                    alert("Request Error");
                }
            } else {
        }
    }

}

function objstr(obj) {
    var s = "";
    for (var i in obj) {
        var v = obj[i];
        if (typeof v == "object") {
            v = objstr(v);
            s += i + ":<br>" + v + "<br>";
        } else {
            s += i + ": " + v + "<br>";
        }
    }
    return s;
}

function processdata(resp) {
    var r = JSON.parse(resp);
    var m = document.getElementById("msg");
    m.innerHTML = objstr(r);
}

</script>

</head>
<body>
<button id="ajaxButton" onclick="togetdata(processdata)">To get data</button>

<span id="msg"></msg>
</body>
person Taiuanhun    schedule 16.08.2012
comment
но я получаю неожиданный токен в JSON.parse в файле Json.js - person user1602452; 16.08.2012
comment
Кажется, вы столкнулись со странной ошибкой. Возможно, вам следует сначала определить ошибку. Вы можете начать с свернутой рабочей версии (например, мой тестовый пример) и добавить больше кодов назад шаг за шагом, пока ошибка не повторится. Я предполагаю, что вы могли включить некоторые старые библиотеки JavaScript, которые повлияли на JSON.parse. - person Taiuanhun; 17.08.2012