【问题标题】:jQuery parse xml from restful web service?jQuery从restful web服务解析xml?
【发布时间】:2013-09-28 03:20:12
【问题描述】:

我有一个从 Careerbuilders api 中提取数据的代码。该链接在浏览器上测试时运行良好,但我似乎无法从中解析任何内容。愿意告诉我有什么问题吗?

html代码:

<div class="main">
    Companies:
</div>

jQuery 代码:

$(document).ready(function () {
        $.ajax({
        type: "GET",
        url: "http://api.careerbuilder.com/v1/jobsearch?DeveloperKey=WDHL4Z86PBQY29Z7ZQQS&Location=Canada",
        dataType: "xml",
        success: xmlParser(xml)
    });

});

function xmlParser(xml) {
    $(xml).find("JobSearchResult").each(function () {
         $(".main").append(
             $(this).find("Company").text()
         );
    });

}

这是一个 jsfiddle 实例:http://jsfiddle.net/Cc4SY/

【问题讨论】:

  • alert(xml) 或 console.log(xml) 的输出是什么?我的猜测是,你只需要 xml.find()
  • 唯一的方法是知道 API 是否提供响应 jsonp 的功能,但由于他们的响应中不包含跨域标头,我认为他们不会支持它(快速搜索并没有找到任何引用 jsonp 的内容)。您需要在其他脚本(如 php)中包装对 Careerbuilder 的 API 的调用,并从 ajax 调用您的 php 脚本。
  • 这是嵌入在每个浏览器的 javascript 实现中的限制。如果正在调用 ajax 的站点不支持 jsonp 也不包括跨域标头,那么您无法为 ajax 工作做任何事情。唯一的办法是编写一个中间脚本并从 ajax 调用它。

标签: javascript jquery ruby-on-rails xml xml-parsing


【解决方案1】:

在您的情况下,xml 不会被定义。您必须将成功回调包装在另一个函数中,该函数又会调用您的 xmlParser 函数。

您正在做的是调用xmlParser 函数并将返回值分配为成功回调,这不是有意的。因此,您将其包装在另一个函数中并从该函数调用xmlParser,在这种情况下,xml 响应将正确传递给xmlParser,您将能够解析它。

代码可能如下所示:

 $(document).ready(function () {
            $.ajax({
                method: "GET",
                url: "http://api.careerbuilder.com/v1/jobsearch?DeveloperKey=WDHL4Z86PBQY29Z7ZQQS&Location=Canada",
                dataType: 'xml',
                success: function (response) {
                    xmlParser(response);
                }
            });
    });

function xmlParser(response){
    var xml = $.parseXML(response);
    $(xml).find("JobSearchResult").each(function () {
        $(".main").append(
            $(this).find("Company").text()
        );
    });
}

【讨论】:

    【解决方案2】:

    我认为现在它正在工作:

    $(document).ready(function () {
            $.ajax({
            type: "GET",
            url: "http://api.careerbuilder.com/v1/jobsearch?DeveloperKey=WDHL4Z86PBQY29Z7ZQQS&Location=Canada",
            dataType: "xml",
            success: function(xml)
                {
                    xmlParser(xml);
                }
        });
    
    });
    

    在这里提琴:http://jsfiddle.net/Cc4SY/2/

    控制台响应:XMLHttpRequest 无法加载 http://api.careerbuilder.com/v1/jobsearch?DeveloperKey=WDHL4Z86PBQY29Z7ZQQS&Location=Canada。 Access-Control-Allow-Origin 不允许来源http://fiddle.jshell.net

    这是一个 jsfiddle 限制。

    【讨论】:

    • 不,这是来自 api.careerbuilder.com 的限制。他们需要在响应中添加标题“Access-Control-Allow-Origin”等,以便 ajax 可以跨站点获取。
    • 是的,我认为这是“访问控制允许来源”的事情。我什至在我的本地主机上尝试过,仍然受到限制。 D:我去谷歌看看会发生什么。
    • 请在您的问题中查看我的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多