json_encode donnant la récursivité d'erreur
Warning: json_encode(): recursion detected in [Directory]
Qu'est-ce que cette erreur, je n'arrive pas à résoudre le problème. C'est la génération d'un GRAND journal par erreur 500 confrontés. 133,000,000 octets la taille. C'est de spammer le journal jusqu'à la mémoire max.
<?php
include('simple_html_dom.php');
if(isset($_REQUEST['type']) && $_REQUEST['type'] = "getmoredetails"){
retrievemore($_REQUEST['htmlsource']);
}
function retrievemore($htmlcode){
$retrievetitle = retrievechTitle($htmlcode);
$retrievermb = retrievechRMB($htmlcode);
echo json_encode(array("error"=>0,"rmb"=>$retrievermb,"title"=>$retrievetitle));
}
function retrievechTitle($htmlcode){
$html = str_get_html($htmlcode);
$title = $html->find('div[class=tb-detail-hd]h3');
return $title[0];
}
function retrievechRMB($htmlcode){
$html = str_get_html($htmlcode);
$rmb = $html->find('[class=tb-rmb-num]');
return $rmb[0];
}
?>
Je suis d'essayer d'extraire des données à partir d'un fichier HTML, l'autre d'extraction fonctionne bien, sauf pour le haut, donnant beaucoup de question. J'ai même séparés de cet ensemble de code spécifique à un fichier PHP pour le traitement et la même question.
Une idée? J'utilise jQuery Ajax avec de multiples fonctions à la page d'accueil de $.ajax({
Je suis nouveau à l'Ajax, c'est bien d'avoir plusieurs Ajax dans une page de droite?
Vous pouvez coller le code dans
C'est trop gros pour télécharger, il va spam la question de l'espace. De toute façon c'est le fichier par défaut de simple analyseur html sur sourceforge
simple_html_dom.php
C'est trop gros pour télécharger, il va spam la question de l'espace. De toute façon c'est le fichier par défaut de simple analyseur html sur sourceforge
OriginalL'auteur CodeGuru | 2013-06-21
Vous devez vous connecter pour publier un commentaire.
Clairement le problème réside dans votre tentative d'appel
json_encode
sur quelque chose qui n'est pas adapté pour elle:Quoi, on peut se demander, est
$retrievetitle
? Ce type de valeur est-il? Eh bien, nous la trouvons dans la définition de la fonction:Donc, clairement, c'est une sorte d'objet. Je ne suis pas familier avec le
simple_html_dom
de la bibliothèque, mais on peut supposer que c'est un objet qui appartient à la bibliothèque et représente un élément HTML. C'est peut-être un natifDOMElement
objet; je ne sais pas.Ce qui est clair, cependant, est que c'est une sorte de structure récursive. C'est-à-dire, en un certain sens, il contient en lui-même. C'est parfaitement possible, en PHP, mais il est impossible de représenter dans une chaîne JSON. Par exemple, en PHP:
$foo->self
est le même objet que$foo
. En effet, vous pourriez faire$foo->self->self->self
et cela fonctionne très bien. C'est très simple structure récursive. Le vôtre est sans doute un peu plus complexe, mais pas différent dans son principe. Cela ne peut pas être représenté en JSON.json_encode
l'erreur lorsqu'il rencontre la récursivité.J'imagine que vous avez probablement envie de stocker le contenu du texte du titre, plutôt que le titre de l'élément lui-même. Brièvement la lecture de la La documentation de l'API de la bibliothèque, il semble que vous voulez le
plaintext
de la propriété. Je ne suis pas tout à fait sûr de savoir comment cela fonctionne (l'APi est, dirons-nous, un peu), mais ma conjecture serait le suivant:Mais ce n'est qu'une supposition éclairée.
Permettez-moi de continuer la lecture pour essayer de le comprendre 😡 Merci beaucoup lonesomeday. Je vous remercie.
Plus que heureux de vous avoir aidé.
OriginalL'auteur lonesomeday
Exemple Simple pour re-créer le problème
Une fois json_encode() rencontre $o->arr[0]==$o il devait repartir avec $o, $o->arr[0], recommencer avec $o et ainsi de suite ad infinitum. Pour éviter cela, la fonction "se souvient" de chaque nœud déjà traitées. Si elle "voit" le même nœud de nouveau il jette à la récursivité d'avertissement.
Le simple_html_dom objets que vous revenez de vos fonctions ont probablement référence à leurs parents des objets ou quelque chose comme ça, causant la récursivité.
Donc, peut-être
return (string)$title[0];
etreturn (string)$rmb[0];
va résoudre le problème.OriginalL'auteur VolkerK
- Ce que vous essayez d'accomplir, à l'aide d'une méthode POST pour envoyer la source HTML. Ensuite, l'analyse sur le côté serveur est un peu sur-tuer.
Quel est votre appel AJAX? Avez-vous définissez le paramètre de type “POST”?
aussi, vous devriez essayer de simplement appeler l'json_encode() de la fonction par elle-même. voir si vous obtenez un message d'erreur.
OriginalL'auteur Roberto Carlos Marte
Parfois simple_html_dom.php ne sera pas jeté à la chaîne comme prévu.
J'ai résolu le problème en fonte syntaxe de la chaîne:
OriginalL'auteur Muhammet Emin Öner