如何使用JSONP、Ajax和jquery读取数据?
How to read data using JSONP, Ajax and jquery?
我正在尝试从这个 API 中读取数据,但它不起作用,我有一个输入框,我可以在其中输入 isbn 编号,然后使用 jsonp 获取数据。你能帮我确定我的错误 ("Cannot read property 'title' of undefined") 在哪里吗?
function add(){
var isbn = parseInt($("#isbn").val());
var list = $("#list");
console.log(parseInt(isbn));
$.ajax({
url: "https://openlibrary.org/api/books?bibkeys=" + isbn + "&jscmd=details&callback=mycallback",
dataType: "jsonp",
success: function(isbn){
var infoUrl = isbn.info_url;
var thumbnailUrl = isbn.thumbnail_url;
var title = isbn.details.title;
var publishers = isbn.details.publishers;
var isbn13 = isbn.details.isbn_13;
console.log(isbn.info_url);
}
});
}
Open Library's API 期望 bibkeys
以其类型和冒号为前缀,而不仅仅是数字:
function add(){
var isbn = 'ISBN:' + $("#isbn").val();
// ...
冒号也意味着值应该是 URL-encoded,jQuery 可以为你做:
$.ajax({
url: "https://openlibrary.org/api/books?jscmd=details&callback=?",
data: { bidkeys: isbn },
dataType: "jsonp",
然后,它 returns 重用您作为属性提供的 bibkeys
的数据:
{ "ISBN:0123456789": { "info_url": ..., "details": { ... }, ... } }
要访问本书的信息,您必须先访问此 属性:
success: function(data){
var bookInfo = data[isbn];
console.log(bookInfo.details.title);
// etc.
}
示例:https://jsfiddle.net/3p6s7051/
您还可以使用 Object.keys()
:
从对象本身检索 bibkey
success: function (data) {
var bibkey = Object.keys(data)[0];
var bookInfo = data[bibkey];
console.log(bookInfo.details.title);
// ...
}
Note: You can use this to validate, since the request can be technically successful and not include any book information (i.e. no matches found):
success: function (data) {
var bibkeys = Object.keys(data);
if (bibkeys.length === 0)
return showError('No books were found with the ISBN provided.');
// ...
我问了一位教授,她是这样告诉我解决的:
function add(){
var isbn = parseInt($("#isbn").val());
var list = $("#list");
console.log(parseInt(isbn));
$.ajax({
url: "https://openlibrary.org/api/books?bibkeys=" + isbn + "&jscmd=details&callback=mycallback",
dataType: "jsonp",
success: function(data){
var thumb=data["ISBN:"+isbn+""].thumbnail_url;
....
}
});
}
我正在尝试从这个 API 中读取数据,但它不起作用,我有一个输入框,我可以在其中输入 isbn 编号,然后使用 jsonp 获取数据。你能帮我确定我的错误 ("Cannot read property 'title' of undefined") 在哪里吗?
function add(){
var isbn = parseInt($("#isbn").val());
var list = $("#list");
console.log(parseInt(isbn));
$.ajax({
url: "https://openlibrary.org/api/books?bibkeys=" + isbn + "&jscmd=details&callback=mycallback",
dataType: "jsonp",
success: function(isbn){
var infoUrl = isbn.info_url;
var thumbnailUrl = isbn.thumbnail_url;
var title = isbn.details.title;
var publishers = isbn.details.publishers;
var isbn13 = isbn.details.isbn_13;
console.log(isbn.info_url);
}
});
}
Open Library's API 期望 bibkeys
以其类型和冒号为前缀,而不仅仅是数字:
function add(){
var isbn = 'ISBN:' + $("#isbn").val();
// ...
冒号也意味着值应该是 URL-encoded,jQuery 可以为你做:
$.ajax({
url: "https://openlibrary.org/api/books?jscmd=details&callback=?",
data: { bidkeys: isbn },
dataType: "jsonp",
然后,它 returns 重用您作为属性提供的 bibkeys
的数据:
{ "ISBN:0123456789": { "info_url": ..., "details": { ... }, ... } }
要访问本书的信息,您必须先访问此 属性:
success: function(data){
var bookInfo = data[isbn];
console.log(bookInfo.details.title);
// etc.
}
示例:https://jsfiddle.net/3p6s7051/
您还可以使用 Object.keys()
:
bibkey
success: function (data) {
var bibkey = Object.keys(data)[0];
var bookInfo = data[bibkey];
console.log(bookInfo.details.title);
// ...
}
Note: You can use this to validate, since the request can be technically successful and not include any book information (i.e. no matches found):
success: function (data) { var bibkeys = Object.keys(data); if (bibkeys.length === 0) return showError('No books were found with the ISBN provided.'); // ...
我问了一位教授,她是这样告诉我解决的:
function add(){
var isbn = parseInt($("#isbn").val());
var list = $("#list");
console.log(parseInt(isbn));
$.ajax({
url: "https://openlibrary.org/api/books?bibkeys=" + isbn + "&jscmd=details&callback=mycallback",
dataType: "jsonp",
success: function(data){
var thumb=data["ISBN:"+isbn+""].thumbnail_url;
....
}
});
}