我在显示通过JSONP调用的JSON数据时出现问题。我有一个复杂的JSON文件通过URL交付域,我是JSON和ajax的新手。我在https://learn.jquery.com/ajax/working-with-jsonp/点击了一篇JSONP文章,这是一种享受。现在我正在尝试迭代JSON对象并在跟随此问题How do I iterate through this JSON object in jQuery?之后在HTML页面中显示数据,而我不会去任何地方。数据没有定义,我不确定我做错了什么:
// Using LibCal and JSONP
$.ajax({
url: "https://api2.libcal.com/1.0/room_bookings_nickname/?iid=3356&group_id=12306&key=92a47e5c854dee620cca071648c3fc41",
// The name of the callback parameter, as specified by the YQL service
jsonp: "callback",
// Tell jQuery we're expecting JSONP
dataType: "jsonp",
// Tell LibCal what we want and that we want JSON
data: {
q: "select Room name,booked timeslots,booking name from LibCal room bookings",
format: "json"
},
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});
$.each(data.bookings, function(index, element) {
alert(element.timeslots.room_name);
});
我希望这对我们那里更高级的用户来说是一个明显的解决办法:)
答案 0 :(得分:2)
这是因为您的data
对象不存在。您引用的data
密钥位于您传递给$.ajax
方法的对象上。
你需要在success
回调中执行你的功能才能使它有意义。
$.ajax({
...
// keep all your original stuff
...
success: function( response ) {
var data = response;
$.each(data.bookings, function(index, element) {
alert(element.timeslots.room_name);
});
}
});
答案 1 :(得分:1)
我这样做了请求。您需要更多一级访问数组才能循环。
var json_url = "https://api2.libcal.com/1.0/room_bookings_nickname/?iid=3356&group_id=12306&key=92a47e5c854dee620cca071648c3fc41"
$.ajax({
url: json_url,
crossDomain:true,
dataType:"jsonp"
}).done(function(response) {
// at the end of request
//Yours --->response.bookings
//Mine --->response.bookings.timeslots
//access the array to loop
var rooms = response.bookings.timeslots;
$.each(rooms, function(index, element) {
create_elem(element.room_name, index);
});
});
以下是jsFiddle中的工作版本 - https://jsfiddle.net/9e746pkh/
希望这有帮助。