【发布时间】:2012-01-14 05:36:47
【问题描述】:
我正在尝试构建一个应用程序,该应用程序可以从 Facebook、LinkedIn、Twitter、StumbleUpon、Digg 和 Delicious 等不同社交网络获取有关 URL 的信息。
我正在使用 REST 请求信息,并且主要收到 JSON 格式的响应。并用 javascript (jQuery) 解析它们
我使用 JSONP 数据类型(将 callback=? 添加到 url)的 jQuerys $.getJSON 方法连接到 Facebook、Twitter 和 Delicious 没有问题,但 LinkedIn 和 StumbleUpon 出现问题。
当我使用相同的技术时,我会遇到错误。
对于 StumbleUpon
"invalid label"
{"result":{"url":"http:\/\/www.google.com\/","in_index":true,"publicid":"2pI1xR","views":201756,"title":"Google","thumbnail":"http:\/\/cdn.stumble-upon.com\/mthumb\/31\/10031.jpg","thumbnail_b":"http:\/\/cdn.stumble-upon.com\/bthumb\/31\/10031.jpg","submit_link":"http:\/\/www.stumbleupon.com\/submit?url=http:\/\/www.google.com\/","badge_link":"http:\/\/www.stumbleupon.com\/badge?url=http:\/\/www.google.com\/","info_link":"http:\/\/www.stumbleupon.com\/url\/www.google.com\/"},"timestamp":1323182766,"success":true}
由于它的跨域请求,显然它在没有 JSONP 请求类型的情况下不起作用。我做了一些研究,发现问题可能是 jQuery 发送 JSONP 请求但得到 JSON 响应然后绊倒。如果这是真的,我不确定我应该怎么做才能使它正确。我用JSONLint 做了一个响应测试并得到了有效的结果。所以看来问题在于我解析它的方式而不是响应本身。
LinkedIn 我下一个
"missing ) after argument list"
IN.Tags.Share.handleCount({"count":18118,"url":"http://www.google.com/"}
很明显它的无效 JSON 和 jQuery 错误了。有没有其他方法可以获取这些数据?
所以当我看到结果时我有点卡在这里,但我无法让它们解析。
PS 我不想为此使用服务器端代码。
这是我使用的代码:
var url = 'http://www.google.com';
// StumbleUpon
$.getJSON("http://www.stumbleupon.com/services/1.01/badge.getinfo?url=" + url +"&callback=?", function (data) {
console.log(data);
});
$.getJSON("http://www.linkedin.com/cws/share-count?url=" + url +"&callback=?", function (data) {
console.log(data);
});
【问题讨论】:
-
您不能向任意 Web 服务发出 JSONP 请求并期望得到结果——您调用的代码必须正确设置才能处理 JSONP 请求
-
能否请您指出正确的方向。我有点困惑,因为我对 twitter 和 facebook 进行了同样的调用,他们确实有效,而 stumbleupon 和 LinkedIn 没有。真的很感激一个例子或一些资源。谢谢。
标签: jquery json cross-domain jsonp