Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 尝试提取xml/json_Javascript_Php_Jquery_Xml_Json - Fatal编程技术网

Javascript 尝试提取xml/json

Javascript 尝试提取xml/json,javascript,php,jquery,xml,json,Javascript,Php,Jquery,Xml,Json,我在尝试从API中提取文件的前15个单词时遇到了问题。我尝试了XML和JSON两种格式,但似乎仍然出现以下错误: 无法加载XMLHttpRequest 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“null” 我在用电脑 这是我的密码: <script type="text/javascript"> (function() { var WeFeelAPI = "http://api.wefee

我在尝试从API中提取文件的前15个单词时遇到了问题。我尝试了XML和JSON两种格式,但似乎仍然出现以下错误:

无法加载XMLHttpRequest

请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“null”

我在用电脑

这是我的密码:

 <script type="text/javascript">
(function() {
  var WeFeelAPI = "http://api.wefeelfine.org:8080/ShowFeelings?display=json&returnfields=feeling,conditions&limit=15";

  $.getJSON( WeFeelAPI,function (json){
    var feel = json.results[15];
    console.log('Our feelings : ', feel);
  });

})();
</script>

如果有任何帮助,我将不胜感激。我对这一切都很陌生,谢谢这里有一个简单的PHP代理,您可以使用JavaScript在页面上运行

<?php
// Saved as ShowFeelings-proxy.php

$options = array_merge($_GET, ['display' => 'xml']);
// if you don't have PHP 5.4+, you need to use the legacy array literal syntax, eg
// array('display' => 'xml')

$uri = 'http://api.wefeelfine.org:8080/ShowFeelings?' . http_build_query($options);

$xml = simplexml_load_file($uri);

// assuming you'd rather work with JSON (I know I would)
$data = [];
foreach ($xml->feeling as $feeling) {
    $entry = [];
    foreach ($feeling->attributes() as $attr => $val) {
        $entry[$attr] = (string) $val;
    }
    $data[] = (object) $entry;
}

header('Content-type: application/json');
echo json_encode($data);
exit;

在阅读We Feel Fine API时,我发现它们似乎不支持JSONP,甚至不支持JSON

阻止您调用它的问题称为同源策略。它可以防止一个域向另一个域发出非法请求,因为它会带来安全问题。你可以在这里阅读:

JSONP JSON with Padding是站点通过将响应加载到外部脚本,然后触发回调函数来验证响应内容的方式。这提供了有关SOP和JSONP的良好信息:

不幸的是,您使用的API看起来不支持JSONP,因此需要代理方法。有一种聪明的/创造性的/可能是黑客式的观点方法,使用一种叫做Yahoo查询语言YQL的东西。YQL允许您使用Yahoo的查询服务作为代理来执行x域请求。您向请求传递一个类似SQL的查询,Yahoo处理JSONP方法。你可以在这里读到:抱歉读了这么多

现在我们来看一些代码来演示这一点。请注意用于检索XML的查询以及必须对其进行编码以供URI使用的事实:

(function () {
    var url = 'http://api.wefeelfine.org:8080/ShowFeelings?display=xml&returnfields=feeling,conditions&limit=15'
    // using yahoo query
    var query = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + url + '"') + 
    '&format=json&callback=?';

    // make request via YQL and show data
    $.getJSON( query, function(data) {
        console.log(data);
        // yql returns "results" in "query" from data
        console.log(data.query.results);
    });
})();
玩弄小提琴:

实际上,同样的方法也可以用于加载HTML,而且实际上可能还可以用于其他用途。关键是从xml中选择*,其中。。。它告诉它选择在请求的URL中找到的XML元素中的所有内容。请记住,XML数据的根上有一个XML元素。大多数情况下,您会将其视为从html中选择*,其中。。。因为典型的web请求返回的HTML是根目录下的HTML元素


我已经在几个项目中使用了这种方法,尽管我的大多数项目都是通过PHP或C使用代理。但是,我在这方面取得了很好的成功,当您不想/不需要为它组合代理时,它非常有用

我觉得感觉不对。。有时候它真的需要关注API的感受。看起来它们不支持远程JavaScript API。。。或者一个JSON响应,根据这个页面,他们只有纯文本或XML-嗯,我想我会很难找到任何建议,关于如何处理它?你不能单独用JavaScript来实现这一点。您可以使用像PHP这样的服务器端语言作为JS的代理,或者干脆将JS全部删除。如果你的页面所在的机器上运行了PHP,我可以为你快速编写一个代理脚本。谢谢,这将非常有帮助。我会让它现在运行:谢谢,这是一个伟大的工作周围非常好似乎工作得很好:这是伟大的,它的工作完美,现在我没有学到更多的从这个。谢谢你的代码,非常感谢:很抱歉,他们都工作得很好,所以我给了那个更需要它的人一个记号。
(function () {
    var url = 'http://api.wefeelfine.org:8080/ShowFeelings?display=xml&returnfields=feeling,conditions&limit=15'
    // using yahoo query
    var query = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + url + '"') + 
    '&format=json&callback=?';

    // make request via YQL and show data
    $.getJSON( query, function(data) {
        console.log(data);
        // yql returns "results" in "query" from data
        console.log(data.query.results);
    });
})();