【发布时间】:2015-03-09 05:58:55
【问题描述】:
我不知道如何解决这个问题,所以我请你帮我解决。
我正在尝试将 RSS 提要解析为 JSON,但由于 XSS 问题,它无法使用 JS 完成(我没有使用 jQuery,所以不推荐我使用插件)。我想我会在 PHP 帮助下做到这一点,并编写了一些代码来获取 url、解析它、一些循环等,它返回正确的 JSON 对象,其中包含数组,它可以在 Chrome DevTools 下的 Network 部分中看到。
问题是 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 );
【问题讨论】:
-
不要在最后一个 console.error 中为那个 type-o 烦恼,这根本不重要。而且我正在使用错误,因为我有很多 console.logs,而且我很懒,我不能让自己删除它们:)
-
您从不将 JSON 解析为对象,不确定如何迭代字符串,但您是说第一个带有
this.reponseText的日志未定义,如果是这样发布 PHP 可能是好主意? -
另外,这看起来很容易受到攻击,只需打开控制台并使用恶意 URL 调用该函数即可将任何内容下载到服务器,这是否存在问题取决于您的操作下载的内容,但请注意。
-
在这种情况下,我并不真正关心安全,因为它将位于我在 Raspberry Pi 上的本地服务器上,我正在制作一个魔镜,我想向我展示来自 RSS 频道的新闻。上面添加了 PHP :)
-
尝试将
request.onload替换为request.onreadystatechange并将open()移到函数后面,就在send()上方。还要确保 PHP 确实输出了一些东西,例如尝试硬编码一个小的 JSON 字符串作为返回的数据,看看它是否有效
标签: javascript php json xmlhttprequest undefined