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