Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery从RESTfulWeb服务解析xml?_Javascript_Jquery_Ruby On Rails_Xml_Xml Parsing - Fatal编程技术网

Javascript jQuery从RESTfulWeb服务解析xml?

Javascript jQuery从RESTfulWeb服务解析xml?,javascript,jquery,ruby-on-rails,xml,xml-parsing,Javascript,Jquery,Ruby On Rails,Xml,Xml Parsing,我有一个从careerbuilders api提取数据的代码。该链接在浏览器上测试时运行良好,但我似乎无法解析其中的任何内容。能告诉我怎么了吗 html代码: <div class="main"> Companies: </div> 下面是一个JSFIDLE实时示例:我认为它现在可以工作了: $(document).ready(function () { $.ajax({ type: "GET", url: "ht

我有一个从careerbuilders api提取数据的代码。该链接在浏览器上测试时运行良好,但我似乎无法解析其中的任何内容。能告诉我怎么了吗

html代码:

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

下面是一个JSFIDLE实时示例:

我认为它现在可以工作了:

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

});
在这里拉小提琴:

控制台响应:无法加载XMLHttpRequest。访问控制不允许原点允许原点


这是一个JSFIDLE限制

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

您所做的是调用
xmlParser
函数,并将返回值指定为success回调,这是不需要的。因此,您将它包装在另一个函数中,并从该函数调用
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()
        );
    });
}

alert(xml)或console.log(xml)的输出是什么?我的猜测是,您只需要xml.find()就可以了。要做到这一点,唯一的方法就是知道API是否提供了jsonp响应,但由于它们的响应中不包含跨域头,我认为它们不会支持它(快速搜索,没有找到任何引用jsonp的内容)。您需要将对careerbuilder API的调用封装在其他脚本(如php)中,并从ajax调用php脚本。这是每个浏览器javascript实现中嵌入的限制。如果所调用的站点不支持jsonp,也不包含跨域标题,那么ajax就无法正常工作。唯一的解决办法是编写一个中介脚本并从ajax.Nop调用它,这是对api.careerbuilder.com的限制。他们需要在响应中添加标题“Access Control Allow Origin”,这样ajax就可以让跨站点获取。是的,我认为这是“Access Control Allow Origin”的问题。我甚至在我的本地主机上尝试过,但仍然受到限制。我去谷歌一下,看看会有什么结果。请看我对你问题的评论。
 $(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()
        );
    });
}