PHP-Funktionen json_encode nicht zurück gültiges json
Ich bin ein Debian-box mit PHP v5.2.17. Ich bin versucht zu bekommen, um die cross-domain-Problem mit einer XML-Datei und verwende diese bekam zum abrufen aller xml-und json zurückgeben:
<?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;
}
}
?>
Das problem ist, es ist nicht die Rückkehr gültigen json, jquery.. Das start-Zeichen "(" und das Ende ")" wo jquery-will "[" als Anfang und "]" als das Ende. Ich habe die Ausgabe und verwendet mehrere online-Validierungs-tools, um es zu überprüfen..
Gibt es eine Möglichkeit, die ich ändern kann, die diese Zeichen vor dem senden zurück oder übergeben Sie die Funktionen json_encode Optionen?
- funktioniert es, wenn Sie entfernen die
header('content-type: application/json; charset=utf-8');
Teil? Ich hatte noch nie ein problem mitjson_encode()
und ich habe nie ein header wie, dass entweder, aber vielleicht sollte ich sein. - Mit
(
und)
Sie eigentlich nicht, daß diejenigen, die in"{$_GET[’callback’]}($json)"
? Wenn ja, entfernen Sie es? Sonst wäre ich sehr überrascht, zu findenjson_encode
gibt einen Wert zurück, mit den umschließenden Klammern. - Ihre Frage Titel ist nicht wahr.
json_encode()
zurück gültige JSON, auch mit SimpleXML Objekte; die Ausgabe geht irgendwelche JSON validator, und Sie können erfolgreichjson_decode()
es. Das eigentliche problem wurde bereits hervorgehoben, indem mehrere Antworten. - Können Sie uns zeigen Sie Ihre jQuery-ajax-call?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man ändern die Funktionen json_encode($data), um die Funktionen json_encode(array($Daten)), wenn es ein array erwartet (wie du sagst):
BEARBEITEN: Auch glaube ich, dass das SimpleXml-Aufruf wird in Folge einer Reihe von SimpleXmlElements, vielleicht die Funktionen json_encode dann denkt, es sollte sein, Objekte, anstelle von arrays? Vielleicht Umwandlung in ein array, erzielen die richtigen Ergebnisse.
können Sie nicht, die Funktionen json_encode()
SimpleXMLElement
s (das ist der Typ, der zurückgegeben wird, durchsimplexml_load_string()
. Haben Sie zum konvertieren der Daten aus der XML-Datei in eine native PHP Typen (wahrscheinlich ein array).SORRY das ist falsch.
json_encode()
können in der Tat codierenSimpleXMLElement
s (zumindest an meiner PHP-version5.3.4
). Also, wenn Ihr client-side code, die ein array erwartet, müssen Sie wickeln Sie Ihre$data
in einem array:Wir können die Funktionen json_encode () - Funktion wahrscheinlich auf array. so müssen Sie zuerst den XML-Inhalt in PHP-array und dann gelten die Funktionen json_encode().Ich denke, das wird Ihr problem lösen..
Scheint es, dass Sie senden eine leere callback-parameter oder sowas, aber die callback-parameter in jQuery muss genau so Aussehen:
callback=?