Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP返回JSON很好,但JavaScript显示它在onload函数中未定义_Javascript_Php_Json_Xmlhttprequest_Undefined - Fatal编程技术网

PHP返回JSON很好,但JavaScript显示它在onload函数中未定义

PHP返回JSON很好,但JavaScript显示它在onload函数中未定义,javascript,php,json,xmlhttprequest,undefined,Javascript,Php,Json,Xmlhttprequest,Undefined,我想不出如何解决这个问题,所以请你帮我解决 我试图将RSS提要解析为JSON,但由于XSS问题,无法使用JS(我不使用jQuery,所以不推荐我使用插件)。我想我会在PHP帮助下完成这项工作,并编写了一些代码来获取url、解析url、一些循环等。它返回正确的JSON对象,其中包含数组,可以在Chrome DevTools的网络部分中看到 问题是JavaScript告诉我响应文本是未定义的。我已经试着解决这个问题3个小时了,但我想不出来 以下是JS代码: this.fetchNew

我想不出如何解决这个问题,所以请你帮我解决

我试图将RSS提要解析为JSON,但由于XSS问题,无法使用JS(我不使用jQuery,所以不推荐我使用插件)。我想我会在PHP帮助下完成这项工作,并编写了一些代码来获取url、解析url、一些循环等。它返回正确的JSON对象,其中包含数组,可以在Chrome DevTools的网络部分中看到

问题是JavaScript告诉我响应文本是未定义的。我已经试着解决这个问题3个小时了,但我想不出来

以下是JS代码:

        this.fetchNews = function ( feed ) {

            var method = 'GET';
            var url = 'feed.php';
            var target = encodeURIComponent( feed );
            var params = '?target=' + target;

            var request = new XMLHttpRequest();
            request.open( method, url + params, true );
            request.setRequestHeader( 'Content-Type', 'application/json; charset=utf-8' );
            request.onload = function () {

                if ( request.readyState === 4 ) {
                    if ( request.status === 200 ) {

                        console.error( this.reponseText );
                        var list = this.reponseText;
                        for ( var i in list ) {
                            i.push( self.news.list );
                        }

                        console.error( self.newst.list );
                    }
                }
            };
            request.send( null );
        };
        this.fetchNews.call( this, 'http://phys.org/rss-feed/&num=20' );
下面是PHP:
$url = $_GET['target'];
$xml = file_get_contents( $url );
$feed = simplexml_load_string( $xml );

$output = array(
    'items' => array()
);
$items = $feed->channel[0];
$i = 0;

foreach ( $items->item as $item ) {

    $title = $item->title;
    $title = (String)$title;
    $output['items'][$i++] = $title;
}

echo json_encode( $output );

Yeeeez我是个白痴,我写了
这个.responseText
而不是
这个.responseText
。很抱歉给您带来麻烦…

不要为上一个控制台中的o类型而烦恼。错误,这一点都不重要。我之所以使用error,是因为我有很多console.log,而且我太懒了,无法让自己删除它们:)你从不将JSON解析为一个对象,不知道如何迭代字符串,但你是说第一个带有
this.reponseText
的日志是未定义的,如果是这样,发布PHP可能是个好主意吗,这看起来很容易受到攻击,只要打开控制台并使用恶意URL调用该函数,就会将任何内容下载到服务器上,这是否是一个问题取决于您对下载内容的处理方式,但请注意。在这种情况下,我并不真正关心安全性,因为它将位于我的本地服务器Raspberry Pi上,我正在制作一个魔镜,我想向我展示来自RSS频道的新闻。上面添加了PHP:)尝试将
request.onload
替换为
request.onreadystatechange
,并将
open()
移动到函数后的
send()
上方。还要确保PHP确实输出了一些东西,例如,尝试硬编码一个小JSON字符串作为返回的数据,以查看它是否工作