php – json_encode给出递归错误

Warning:  json_encode(): recursion detected in [Directory]

这是什么错误,我似乎无法解决问题.它每个错误500面临生成一个巨大的日志. 133,000,000字节大小.这是垃圾邮件的日志,直到记忆最大.

<?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];
}

?>

我正在尝试从HTML文件提取数据,其他提取工作正常,除了上述内容,给出了很多问题.我甚至将这组代码专门分配给一个PHP文件进行处理和同样的问题.

任何想法?我使用jQuery Ajax与主页上的多个功能$.ajax({
我是Ajax的新手,在一个页面中有多个Ajax可以吗?

问题显然在于您尝试在不适合的情况下调用json_encode:
echo json_encode(array("error"=>0,"title"=>$retrievetitle));

我们可能会问,是美元?它有什么价值?那么我们在函数定义中找到它:

$html = str_get_html($htmlcode);
$title = $html->find('div[class=tb-detail-hd]h3');
return $title[0];

很明显,这是一种对象.我不熟悉simple_html_dom库,但大概是一个属于该库的对象,代表一个HTML元素.也许它是一个本机DOMElement对象;我不知道.

然而,很明显的是它是某种递归结构.也就是说,在某种意义上它包含自己.这在PHP中是完全可能的,但是不可能在JSON字符串中表示.例如,在PHP中:

class Foo {
    public $self;

    public function __construct() {
        $this->self = $this;
    }
}
$foo = new Foo;

$foo> self是与$foo相同的对象.事实上,你可以做自己的自我&自我&自我,这样做会很好.这是一个非常简单的递归结构.你的原则可能有点复杂,但不一样.这不能在JSON中表示. json_encode在遇到递归时会出错.

我想象你可能想要存储标题的文本内容,而不是标题元素本身.简单阅读API documentation for the library,似乎你想要明文属性.我不太清楚这是如何工作的(我们应该说,APi是稀疏的),但是我的猜测是:

return $title[0]->plaintext;

但这只是一个受过教育的猜测.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...