JSONP回调失败,需要javascript / jquery的帮助

时间:2009-07-21 17:23:45

标签: jquery json

我是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

感谢

3 个答案:

答案 0 :(得分:3)

我原本认为问题最有可能出现在同源策略中。为了对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);

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

答案 1 :(得分:1)

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

修改

另外,我认为你不需要每个功能。它似乎是在迭代数据对象的成员。你想让它直接使用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调用要返回一个对象数组然后,您需要使用每个方法迭代它们。我不太了解服务,知道是否有方法可以返回一个对象数组。但是,这个电话不会。

答案 2 :(得分:0)

你不清楚什么是错的。回调似乎是试图获取nowtime字段并将其放在页面上的控件中。我想这个:

$("").html

双引号中应该有一个选择器来告诉它结果的位置。 像$(“#myfield”)....