Попытка преобразовать строку в объект, используя Javascript, но с синтаксической ошибкой в ​​ie8 - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть php-файл, который отправляет строку в js-файл с использованием xmlhttp. Файл js должен преобразовать строку в объект и начать делать свое дело с этим объектом.

Ну, php-файл печатает эту строку:

$obj="{status:'ok',data:'{link:\"".$link."\",c:\"".$c."\",p:\"".$p."\"}'}";
echo $obj;

и файл js должен получить это:

{status:'ok',data:'{link:"http://test.com/test.html",c:"9",p:"1"}'}

Когда я пытаюсь преобразовать эту строку в файле js из строки в объект, я получаю синтаксическую ошибку на ie8 (отлично работает в Firefox и Chrome).

Вот как я делаю это в файле js:

eval("var response=" + xmlhttp.responseText);

Я попытался поместить строку вручную в файл js, и eval сработал, поэтому я думаю, что проблема в апострофах и кавычках, опубликованных файлом php.

Что ты думаешь? Кто-нибудь знает решение этой проблемы?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Чтобы пояснить мой комментарий выше, PHP и JavaScript позволяют очень легко кодировать и декодировать JSON. Ваш PHP будет выглядеть так: чистый вложенный массив без уродливой конкатенации строк:

<?php
$obj = array(
  'status' => 'ok',
  'data'   => array(
    'link' => $link,
    'c'    => $c,
    'p'    => $p
  )
);
?>

... и ваш JavaScript будет выглядеть так, безобразно eval:

<script>
  var response = JSON.parse(xmlhttp.responseText);
</script>

В случае, если вы используете копию PHP без скомпилированной поддержки JSON и не можете самостоятельно обновить ее, есть много библиотек JSON с открытым исходным кодом для PHP, которые вы можете добавить, которые имеют та же функциональность, включая Services_JSON от PEAR.

Если вы застряли с поддержкой браузеров без JSON, просто вставьте json2.js .

0 голосов
/ 15 декабря 2011

Я обнаружил, что один из моих php неправильно отправил строку JSON !!Теперь он работает в обоих направлениях - eval и json2.js Большое спасибо за вашу помощь!:)

...