3

我不是开发人员,但很擅长复制/粘贴。

我正在尝试https://latitude.google.com/latitude/apps/badge/api?user=xxxxxxxxxxxxxxxxx&type=json在网页 (JavaScript) 中解析 Google Latitude JSON ()。没有PHP这可能吗?如果是这样,你能告诉我一些示例代码吗?

我一直在寻找,但我发现的所有示例都使用 PHP。

我使用了以下代码:

<!DOCTYPE html>
<html>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"         type="text/javascript"></script>
<script type="text/javascript">
$(function() {
// script goes here

$.getJSON('https://latitude.google.com/latitude/apps/badge/api?&user=xxxxxxxxxxxxxxxxxxx', function(data) {
alert(data.type);
});
});
</script>
</body>
</html>

我试过的这段代码出错了:

    3 requests  ❘  21.38KB transferred  ❘  470ms (onload: 448ms, DOMContentLoaded: 448ms)
104ms157ms209ms261ms313ms366ms418ms470ms
    OPTIONS https://latitude.google.com/latitude/apps/badge/api?&user=xxxxxxxxxxxxxxxx 405         (Method Not Allowed) jquery.min.js:19
    o.extend.ajax jquery.min.js:19
    o.extend.get jquery.min.js:19
    o.extend.getJSON jquery.min.js:19
    (anonymous function) json.html:12
    o.extend.ready.o.readyList jquery.min.js:19
    o.extend.each jquery.min.js:12
    o.extend.ready jquery.min.js:19
    (anonymous function) jquery.min.js:19
    XMLHttpRequest cannot load https://latitude.google.com/latitude/apps/badge/api?&user=xxxxxxxxxxxxxxxxxxxxxx. Origin h ttp://dl.dropbox.com is not allowed by Access-Control-Allow-Origin.
4

4 回答 4

2

为了发出跨域 AJAX 请求,您需要使用 CORS 或 JSONP。这是服务器必须支持的。谷歌纵横似乎不支持这一点,因此您需要使用服务器端语言(例如 PHP)来获取数据。

编辑:如果您不想使用 PHP,而只想使用 JavaScript,则可以使用Yahoo 的 YQL(您可能需要 API 密钥)。

var googleURL = 'https://latitude.google.com/latitude/apps/badge/api?user=xxxxxxxxxxxxxxxxx&type=json';
$.getJSON('http://query.yahooapis.com/v1/public/yql?callback=?', {
    q: 'select * from json where url="'+googleURL+'"',
    format: 'json'
}, function(data) {
    if(data.query.count){
        var gData = data.query.results.json;
        alert(gData.type);
    }
});
于 2012-09-25T21:19:06.943 回答
0

好像您使用了错误的网址。去掉“user”前的“&”,添加“type”参数:https ://latitude.google.com/latitude/apps/badge/api?user=xxxxxxxxxxxxxxxxxxx&type=json

请注意,用户 ID 可以以“-”号开头。

此外,似乎您尝试使用 Dropbox 作为托管,这会阻止您发出 ajax 请求。尝试从本地驱动器或常规 Web 服务器加载您的 html 页面。

于 2012-09-25T21:12:21.943 回答
0

您有一个跨站点请求。

看到最后一行错误: XMLHttpRequest cannot load https://latitude.google.com/latitude/apps/badge/api?&user=xxxxxxxxxxxxxxxxxxxxxx。Access-Control-Allow-Origin 不允许来源 h ttp://dl.dropbox.com?

您的原始脚本托管在一台服务器上,比如说您的服务器。它只能请求来自同一个域的数据。即使您使用不同的端口(http/https),它也不起作用。

你可以让它与this一起工作。

另一种可能的解决方案是在您的服务器上创建一个 php 脚本或类似的脚本,该脚本将从 YAHOO 获取数据并将输出转储到结果中。然后您的 jQuery ajax 调用将调用您自己的脚本(在您的服务器上,因此不会发生跨站点 HTTP 请求)并且它会以这种方式工作。我想这不是一个好的架构,特别是如果你期望有很多负载,但它会起作用。

于 2012-09-25T21:18:49.623 回答
0

您不需要解析 JSON,$.getJSON它会为您完成,并返回一个 JavaScript 对象。您的错误与 JSON 本身无关 - 您正在尝试执行浏览器安全策略阻止的跨站点请求。我建议继续阅读JSONP

http://json-p.org/

干杯

于 2012-09-25T21:19:29.823 回答