使用JSON-P检索数据

时间:2012-10-23 17:01:45

标签: javascript jsonp

我是javascript的新手。我正在尝试使用以下代码检索跨站点数据。

我该如何进行此代码工作,例如我希望每个家庭成员都能收到屏幕提醒。

感谢您的帮助。

代码修改如下,警告说[object Object],你知道这意味着什么吗?:

<html>
<head>
<script type="text/javascript" 

src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">

      // LOOP THROUGH EACH FAMILY MEMBER AND DO STUFF!
      alert(mValue)
    });
}
});
</script>
</head>
<body>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

您不希望在$ .each

中使用jQuery包装oData

所以,而不是

$.each($(oData['ops:patent-family']['ops:family-member']),

你想要:

$.each(oData['ops:patent-family']['ops:family-member'],

另外 - 你必须使用返回的json(有一个第一个'ops:world-patent-data'级别),这看起来更像是:

if(oData['ops:world-patent-data'] && 
  oData['ops:world-patent-data']['ops:patent-family'] && 
  oData['ops:world-patent-data']['ops:patent-family']['ops:family-member']){

  $.each(oData['ops:world-patent-data']['ops:patent-family']['ops:family-member'],
    function(iIndex, mValue) {
      // LOOP THROUGH EACH FAMILY MEMBER AND DO STUFF!
      console.log(iIndex, mValue)
    });

}

另一种完全不同的方法是使用jquery deferreds语法并使用.pipe转换数据 - 可能比if更清晰

var sUrl =  "http://ops.epo.org/2.6.2/rest-services/family/publication/docdb/EP.1000000.A1/.js?callback=?";    

$.getJSON(sUrl)
.pipe(function(data){
    try{
        return data['ops:world-patent-data']['ops:patent-family']['ops:family-member'];
    } catch(e){
        return [];
    }
})
.then(function(members){
    $.each(members, function(iIndex, mValue){ 
        console.log(iIndex, mValue)
    })
})

答案 1 :(得分:0)

您需要创建内联脚本:

    function myCallback(response) {
        // Your stuff goes here.
    }
    var script = document.createElement("script");
    script.src = "http://ops.epo.org/2.6.2/rest-services/family/publication/docdb/EP.1000000.A1/.js?callback=myCallback";
    script.type = "text/javascript";
    document.getElementsByTagName("head")[0].appendChild(script);

答案 2 :(得分:0)

jQuery的$ .ajax方法允许您为请求指定dataType。如果您指定JSONP,它将为您创建回调,因此您不必担心这一点。

它是这样的:

$.ajax(url, {
    dataType: 'jsonp',
    success: function(data) {
        // do stuff with data here
    }
});​

这是一个JSFiddle,用你需要的数据证明: http://jsfiddle.net/PPVX3/

现在它正在将数据记录到控制台,如果您使用的是Chrome或Firefox,则可以使用开发人员工具查看控制台日志。