帮助Jsonp和jQuery

时间:2010-11-30 16:29:26

标签: jquery jsonp

我在jsonp中提供了一个Web服务,但由于我是新手,因此我很难检索数据。这是我的代码:

$(document).ready(function(){               
   $.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=myData",
       function myData(result){
           $('#status').append(result.name.text);
        }
   );

});

div #status返回空。

你可以帮忙吗?

提前致谢

莫罗

更新:现在可以了!当我试图循环数据时,它不会发生:

$.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=?",
         function (result){
              $.each(result.items, function(item){
                 $('#status').append(item.response.lines[0].name);
        });
     }
);

我做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

来自jQuery API

  

如果网址包含字符串“callback =?” (或类似的,由服务器端API定义),请求被视为JSONP。

我认为您的代码看起来应该是这样的

$.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=?", function (result){
    $('#status').append(result.name.text);
});

技巧是URL的json=?部分。我认为jQuery动态创建一个函数来解析de JSONp数据并将结果提供给你的回调函数。

原谅我的英文:)

更新:访问您必须在回调函数内result.response.lines进行迭代的数据

$.each(result.response.lines, function() {
    $('#status').append(this.name);
}

答案 1 :(得分:2)

这是网址的输出:

myData({"response":{"lines":[{"name":"Central"},{"name":"Victoria"}]}});

您可以重新格式化对象以使其更清晰:

{
    "response": {
        "lines": [
            {"name":"Central"},
            {"name":"Victoria"}
        ]
    }
}

我看不到名为text的属性。你可能意味着:

$('#status').append(result.response.lines[0].name);

更新:此解决方案无法完全解决问题。正如在接受的答案中所建议的那样,您需要指示jQuery生成随机函数名称(您不能提供自己的函数名称,至少不能使用getJSON)。