0

我正在尝试从 itis.gov 网络服务中检索数据并显示在 html 页面上。

该站点具有JSON 和 JSONP Web 服务。我无法弄清楚为什么下面的代码不起作用,我的代码可以与其他 JSON Web 服务 API(例如 facebook API)一起使用。

这是一个使用网络服务方法“getScientificNameFromTSN”的JSON API 调用示例

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<body>
<script>
$(document).ready(function() {
   var url="http://www.itis.gov/ITISWebService/jsonservice/getScientificNameFromTSN?";
   $.getJSON(url, { "tsn" : "202384" }, function(data) {
      document.write(data.author);
   });
});
</script>
</head>
<body>
</body>
</html>
4

2 回答 2

1

您链接到的文档页面包含以下文本:

通过将“jsonp=function_name”附加到 Web 服务调用的参数列表来进行 JSON-P 调用。

为此,您需要将其添加jsonp=?到您的 URL 的查询字符串中。例如:

$(document).ready(function() {
    var url="http://www.itis.gov/ITISWebService/jsonservice/getScientificNameFromTSN?jsonp=?";
    $.getJSON(url, { "tsn" : "202384" }, function(data) {
        document.write(data.author);
    });
});

然后 jQuery 将?用其自动生成的函数的名称替换 。

于 2013-04-11T08:30:11.840 回答
0

为了支持真正的 ajax 请求,您的服务器应该使用Access-Control-Allow-Origin: *header 来回答,但事实并非如此。

或者,您可以使用$.ajax; 它对我来说看起来更清晰和方便

$.ajax({
    url     : "http://www.itis.gov/ITISWebService/jsonservice/getScientificNameFromTSN",
    data    : { "tsn" : "202384" },
    dataType: "jsonp",
    jsonp   : "jsonp",
    success : function(data) { console.info(data); } 
});

请注意,您应该传递 dataType 来表示 jquery 您使用填充查询跨域数据,并且您应该提供带有回调名称的查询字符串参数,因为您的服务器需要 ( jsonp : "jsonp")。

结果是

author: "Merriam, 1914"
class: "gov.usgs.itis.itis_service.data.SvcScientificName"
combinedName: "Ursus arctos nelsoni"
kingdom: "Animalia"
tsn: "202384"
unitInd1: null
unitInd2: null
unitInd3: null
unitInd4: null
unitName1: "Ursus"
unitName2: "arctos"
unitName3: "nelsoni"
unitName4: null
于 2013-04-11T08:39:20.420 回答