PHP json_encode не возвращает действительный json - PullRequest
2 голосов
/ 29 июня 2011

Я использую Debian Box с PHP v5.2.17.Я пытаюсь обойти междоменную проблему с помощью XML-файла и использую его для получения любого XML и возврата json:

<?php
header('content-type: application/json; charset=utf-8');

if( strlen($_GET["feed"]) >= 13 ) {
  $xml = file_get_contents(urldecode($_GET["feed"]));
  if($xml) {
    $data = @simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);
    $json = json_encode($data);

    echo isset($_GET["callback"]) ? "{$_GET[’callback’]}($json)" : $json;
  }
}
?>

Проблема в том, что он не возвращает действительный json в jqueryНачальный символ "(", а конец ")", где jquery хочет "[" как начало и "]" как конец.Я взял вывод и использовал несколько онлайн-инструментов проверки, чтобы проверить его ..

Есть ли способ, которым я могу изменить эти символы перед отправкой назад или передачей параметров json_encode?

Ответы [ 4 ]

1 голос
/ 29 июня 2011

Вы не можете json_encode() SimpleXMLElement s (это тип, который возвращается simplexml_load_string(). Вы должны преобразовать данные из файла XML в некоторый собственный тип PHP (скорее всего, в массив).

К сожалению это неправильно. json_encode() может фактически кодировать SimpleXMLElement s (по крайней мере, в моей версии PHP 5.3.4). Так что, если ваш клиентский код ожидает массив, вы должны заключить $data в массив:

$json = json_encode(array($data));
1 голос
/ 29 июня 2011

Вы можете изменить json_encode ($ data) на json_encode (array ($ data)), если он ожидает массив (как вы говорите):

$json = json_encode(array($data));

EDIT : Кроме того, я полагаю, что вызов SimpleXml приведет к куче SimpleXmlElements, возможно, тогда json_encode решит, что это должны быть объекты, а не массивы? Возможно, приведение к массиву даст правильные результаты.

0 голосов
/ 29 июня 2011

Похоже, что вы отправляете пустой параметр обратного вызова или что-то, но параметр обратного вызова в jQuery должен выглядеть точно так: callback=?

0 голосов
/ 29 июня 2011

Мы можем использовать функцию json_encode () наиболее вероятно в массиве. поэтому сначала вы берете XML-контент в массив PHP, а затем применяете json_encode (). Я думаю, что это решит вашу проблему ..

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