使用JSONP和我有'ReferenceError:数据未定义'

时间:2016-01-19 05:33:26

标签: javascript jquery json ajax

我在显示通过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); 
});

我希望这对我们那里更高级的用户来说是一个明显的解决办法:)

2 个答案:

答案 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/

希望这有帮助。