Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSONP和我有';引用错误:未定义数据';_Javascript_Jquery_Json_Ajax - Fatal编程技术网

Javascript 使用JSONP和我有';引用错误:未定义数据';

Javascript 使用JSONP和我有';引用错误:未定义数据';,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我在显示通过JSONP调用的JSON数据时遇到问题。我有一个通过URL跨域传递的复杂JSON文件,我是JSON和ajax的新手。我在这里关注了一篇JSONP文章,这篇文章非常有用。在回答完这个问题后,现在我尝试遍历JSON对象并在HTML页面中显示数据,我不打算去任何地方。数据未定义,我不确定我做错了什么: // Using LibCal and JSONP $.ajax({ url: "https://api2.libcal.com/1.0/room_bookings_nickname

我在显示通过JSONP调用的JSON数据时遇到问题。我有一个通过URL跨域传递的复杂JSON文件,我是JSON和ajax的新手。我在这里关注了一篇JSONP文章,这篇文章非常有用。在回答完这个问题后,现在我尝试遍历JSON对象并在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); 
});

我希望这对更高级的用户来说是一个明显的修复:)

这是因为您的
数据对象不存在。您所指的
数据
键是传递给
$.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); 
        });
    }
});

我是这样做的。您需要再上一层才能访问要循环的数组

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); 
  });
});
以下是JSFIDLE中的工作版本-


希望这有帮助。

我没有看到问题的迭代部分。我的错,让我试一试。它在JSFIDLE中有效吗?我在那里遇到了真正的问题,所以我在括号里做了我自己的。@RyanCoolwebs是的,它是有效的。我刚刚更新了我的答案。它在JSFIDLE中工作,因为我允许跨域:true。谢谢@Devtye,你搞定了!我对我的代码进行了更新,我的控制台日志收回了我想要的数据列表。也没有意识到jsiddle有一个允许跨域的选项:true,但看起来jsiddle确实经历了最近的改头换面/升级。再次感谢。@RyanCoolwebs是的,jsFiddle是一个很好的工具,他们最近用它做了很多,欢迎您。我很高兴我能帮上忙:)啊,新手的错误。我现在已经修复了代码,所以不会抛出错误。现在的问题是向下查看JSON数据树-获取大量未定义的对象。@RyanCoolwebs发生在我们中最好的人身上。至于未定义的对象,如果这是您从服务器得到的-祝您好运。我不知道我能帮你什么忙