内容:未在JSON响应中编码

时间:2019-02-06 18:52:13

标签: jquery xml

我正在从以下RSS供稿中检索数据:https://www.merlot.org/merlot/materials.rss?hasAwards=false&hasComments=false&hasCourses=false&filterTypesOpen=false&keywords=EarlyProgress&dateRange=0&hasEtextReviews=false&isLeadershipLibrary=false&hasCollections=false&filterOtherOpen=false&isContentBuilder=false&filterSubjectsOpen=true&hasAccessibilityForm=false&hasPeerReviews=false&fromAdvancedSearch=true&hasAssignments=false&filterPartnerAffiliationsOpen=true&hasRatings=false&hasSercActivitySheets=false&days=7&filterMobileOpen=false&hasEditorReviews=false&page=1

我想遍历所有项目并解析内容。我可以获取除 content:encoded 以外的所有元素。

如果我控制台记录ajax响应,然后控制台记录项目元素之一,则除了content:encoded以外,我都会看到它们。示例:

0:
author: "Amir Karimi The University of Texas at San Antonio"
link: "https://www.merlot.org/merlot/viewMaterial.htm?id=1138036"
pubDate: "Tue, 15 Mar 2016 14:45:55 GMT"
title: "Factors Influencing Student Graduation Rates"

这是我使用ajax请求的代码,假定json返回类型:

$.getJSON(url).then( function(response) {buildFeed(response.data['channel']['item']);});

function buildFeed(data) {  
    let feed = "";

    console.log(data);

    //for each row of data
    $.each(data, function(key, value) {

        feed = feed + '<div className="feed-item">';
            feed = feed + '<div><a href="' + value.link + '" target="_blank">' + value.title + '</a></div>';
            feed = feed + '<div></div>';
            feed = feed + '<div>' + value.pubDate + '</div>';
            feed = feed + '<div>Author: ' + value.author + '</div>';
            feed = feed + '<hr/>';
        feed = feed + '</div>';

    }); 

    //Load feed
    $feed.html(feed);
}

我还尝试使用xml请求类型发出ajax请求,但收到解析错误。下面的代码:

        url: appURL + '/merlot-feeds/feed/earning-jr-status/',
        dataType: "xml",
        success: function(xml) {

            //it never gets here
            console.log('success');
            console.log(xml);

        },
        error: function(xhr, status) {

            //The request always returns an error
            console.log('error');
            console.log(xhr);
            console.log(status);    //result is "parserror"
            console.log(xhr.responseText);

        }
    }); 

上述ajax调用失败,并且在我登录控制台时,状态显示为“ parsererror”。但是,如果我在控制台上记录响应文本,则会得到完整的响应对象。

以下假定是否正确:源xml设置不正确,这就是为什么它引发parseerror错误?如何解决此问题并提取编码的内容?

2 个答案:

答案 0 :(得分:0)

我能够以Atom提要而不是RSS提要的形式获取内容,从而将标签从<content:encoded>切换为<summary>,现在我可以使用第一种方法了。并不是一个真正的答案,也无法解决根本原因,但是,嘿,它现在正在起作用。

答案 1 :(得分:-1)

它不是JSON,而是XML,对于XML来说,它通常像HTML一样读/解析,并且选择<content:encoded>时必须用:来代替冒号\\:,最后使用{{1 }},而不是$.get()

$.getJSON()