【问题标题】:JSONP callback fails, need help with javascript/jqueryJSONP 回调失败,需要有关 javascript/jquery 的帮助
【发布时间】:2009-07-21 17:23:44
【问题描述】:

我是 json 的菜鸟(知道一点 jquery)......并试图让一个小脚本工作 我想检索某个纬度/经度的时间 并根据我在网上阅读的内容编写了这个脚本:

$.getJSON("http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2&callback=?", 

    { 'uID': 1 }, 

    function(data) {
        $.each(data, function(i, item) {
            $("<span/>").html(item.time).html(".nowtime");
        });
    });

不用说,它不起作用......有人可以帮我一把,并解释一下 $("").html(item.time).html(".nowtime"); 方法。 (我不明白第一个是什么)

这里是json源参考:http://www.geonames.org/export/web-services.html#timezone

谢谢

【问题讨论】:

  • 启动萤火虫。它在哪里失败?发送请求?还是在回调中?
  • nvm 我运行了它。它在回调中失败。 firebug 不太适合调试,但至少我可以合理地确定它不是 XSS。

标签: jquery json


【解决方案1】:

我最初认为问题很可能出在同源策略中。为了向 URL 发出 AJAX 请求,它必须与包含 Javascript 代码的页面位于同一域(和端口)中。

但在乔治四世更正之后,我检查了它。

回调中返回的data 对象是JSON 评估的对象,它不是一个数组。很可能,您的代码应该是这样的:

$.getJSON("http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2&callback=?", 
  { 'uID': 1 }, 
  function(data) {
    $("<span/>").html(data.time); // Or maybe with a different selector (see below)
  }
);

选择器可能也是错误的,例如,您可能希望将结果放入 id 为 test 的 div 中。在这种情况下,包含选择器的行应更改为:

$("#test").html(data.time);

这就是说,获取 id 为 test 的对象(井号 (#) 表示这是一个想法),并使用 data.time 设置的任何内容更新内容。

【讨论】:

  • 最好没关系,这就是 stackoverflow 使用它的天赋。
  • 甜蜜!伟大的思南....它比我想象的代码要简单得多。我想当希望输出多个对象时必须使用 each 语句?感谢您的帮助,乔治四世也感谢您的帮助
  • 通常,是的。当您循环遍历包含多个对象的数组时,您使用each。您可以将each 与对象一起使用(如上面代码中的data),但这是一个不同的用例;它遍历了它的所有属性,你可能不会很快需要它(如果你还是第一次使用 JSON!)。
【解决方案2】:

span 代码正在创建一个 span 元素,然后将其 HTML 设置为返回的时间值。不过,代码看起来是错误的,因为它立即将 HTML 设置为“.nowtime”,但从未真正将其添加到 DOM。我猜最后一个 .html('.nowtime') 真的应该是 .addClass('.nowtime') 并且应该有一个 .appendTo(???) 那里的某个地方,但我不确定你在哪里应该附加它。

编辑

另外,我认为您不需要 each 函数。它似乎在迭代数据对象的成员。您只想让它直接使用 time 属性。

示例(不过,您可能希望将其添加到其他地方的 DOM):

$(function() {
    $.getJSON("http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2&callback=?", { 'uID': 1 }, function(data) {
        $("<span/>").html(data.time).appendTo('body');
    });
});

注意:如果您的 JSONP 调用要返回一个对象数组然后,您需要使用 each 方法遍历它们。我对服务了解得不够多,无法知道是否有方法可以返回对象数组。但是,这个调用没有。

【讨论】:

  • 我们赢了!我只是在萤火虫中运行它,问题在于使用eachi 是键,item 是他的情况下的值。
【解决方案3】:

你不是很清楚哪里出了问题。回调似乎试图获取 nowtime 字段并将其放入页面上的控件中。我认为:

$("").html

应该在双引号中有一个选择器来告诉它结果的去向。 像 $("#myfield")....

【讨论】:

  • 没有“nowtime”属性。我猜这是一个应该应用的类,但是没有足够的代码(标记)来说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2011-05-09
  • 2012-07-27
  • 1970-01-01
  • 2010-09-29
  • 2014-06-20
  • 2010-12-13
相关资源
最近更新 更多