【问题标题】:PHP returns JSON fine but JavaScript shows it is undefined in onload functionPHP 返回 JSON 很好,但 JavaScript 显示它在 onload 函数中未定义
【发布时间】: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


【解决方案1】:

是啊,我是个白痴,我写的是this.reponseText而不是this.responseText。给您添麻烦了……

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2012-01-02
    • 2016-12-15
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多