使用jquery ajax从url加载json文件的问题

Posted

技术标签:

【中文标题】使用jquery ajax从url加载json文件的问题【英文标题】:Problem with loading json file from url using jquery ajax 【发布时间】:2019-06-08 22:07:23 【问题描述】:

所以这是我写的代码,我的任务是这样的: 我有来自这里的 json 文件:http://ergast.com/api/f1/+SEASON+/drivers.json 有两个季节:2016 年和 2017 年,所以我需要相应的两个 json 文件。 我必须列出三个清单。 第一个应该包含 2016 赛季的 json 文件,所以,http://ergast.com/api/f1/2016/drivers.json 并且应该只包含名字和姓氏 第二个应该包含 2017 赛季的 json 文件,所以 http://ergast.com/api/f1/2017/drivers.json 并且还应该包含名字和姓氏 第三个列表应该包含我最喜欢的驱动程序,所以它需要是可排序的用户界面,这样我就可以拖放到那里,反之亦然,当第三个列表中有人时,我的意思是名字和姓氏,然后点击整个名字应该有额外的信息,比如数字、出生日期、国籍……我是用 jquery ui 工具提示做的。 工具提示正在工作,但是当我单击第二个选项卡时,我无法返回第一个选项卡 请帮忙!

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
      <title>Formula 1</title>
      <script>
         function getEntries(u,l) 
             $.ajax(
                url: u,
                dataType: "jsonp",
                 success: function (data) 
                     $.each(data.Drivers, function (i,item) 
                         var name = item.givenName;
                         var surname = item.familyName;
                         var num = item.permanentNumber;
                         var date = item.dateOfBirth;
                         var nationality = item.nationality;
                         var strana = item.url;
                         l.append("<div class='container2'><ol><li>Name: '+name+', Surname: '+surname+'</li></ol>");
                     );
                 


             );
         
         $(document).ready(function () 
             var u1 = "http://ergast.com/api/f1/2016/drivers.json";
             var u2 = "http://ergast.com/api/f1/2017/drivers.json";

             var l1 = $('#list1');
             var l2 = $('#list2');

             getEntries(u1,l1);
             $("#tabs").tabs(
                 beforeActivate: function (uevenet,ui) 
                     if(ui.newTab.index()==0) 
                         if($("#list1 li").size()==0) 
                             getEntries(u1,l1);
                         
                     
                     else if(ui.newTab.index()==1)
                     
                         if($("#list2 li").size == 0)
                         
                             getEntries(u2,l2);
                         
                     
                 
             );

             $("#list3").sortable();

             $( "#list1" ).sortable(
                 connectWith: "#list3"
             );
             $( "#list2" ).sortable(
                 connectWith: "#list3"
             );
             $( "#list1, #list2, #list3" ).disableSelection();

             $(document).tooltip(
                 items: "#list3 li, #list2 li, #list1 li",
                 content: function()
                     var el = $(this);
                     var br = el.attr("num");
                     var datum = el.attr("date");
                     var nacionalnost = el.attr("nationality");
                     var link = el.attr("strana");

                     return "Number of driver: " +  br +
                            "Datum na raganje" + datum +
                            "Nacionalnost" + nacionalnost +
                            "Url do vozac" + link;
                 
             );


         )

      </script>
      <style>
         .container
         float:left;
         margin:20px;
         padding: 5px;
         
         .container1
         float:right;
         padding: 5px;
         
         .container2
         width: 500px;
         
         .li:nth-child(odd)  background: white;
         .li:nth-child(even)  background: lightblue; 
         .container
         border-left: 1px lightgray solid;
         
         #list1, #list2, #list3
         list-style-type: none;
         
         .row-selected
         background:lightblue;
         
      </style>
   </head>
   <body>
      <div id="tabs" style="min-height:5000px">
         <ul>
            <li><a href="#tabs-1">2016 Drivers</a></li>
            <li><a href="#tabs-2">2017 Drivers</a></li>
         </ul>
         <div id="tabs-1">
            <div class="container" style="float:left">
               <strong>2016 Drivers</strong>
               <ul id="list1"></ul>
            </div>
         </div>
         <div id="tabs-2">
            <div class="container" style="float:left">
               <strong>2017 Drivers</strong>
               <ul id="list2"></ul>
            </div>
         </div>
         <div id="fav" class="container1" style="float:left">
            <strong>Favourites</strong>
            <ul id="list3">
               <li>Drop you favourite drivers here...</li>
            </ul>
         </div>
      </div>
   </body>
</html> 

【问题讨论】:

【参考方案1】:

修复Json返回对象值 $.each(data.MRData.DriverTable.Drivers, function (i,item) ...

修复 " 和 ' 混合。 姓名:“+name+”,姓氏:“+surname+”

使用长度而不是大小 if($("#list1 li").长度 ==0 )

有关更多错误消息,请参阅开发者工具中的控制台窗口。

【讨论】:

不是 $.each(data.MRData.MRData) 因为就像你告诉我的那样,我得到了 DriverTable undefined 的错误提示 console.log(data) 并检查返回对象。 data.MRData.DriverTable.Drivers 有效。 Uncaught TypeError: Cannot read property 'DriverTable' of undefined at Object. (kol1.html?_ijt=ifi338tcgksrbcml628p0jmvkk:17) at Function.each (jquery.min.js:2) at Object.success (kol1.html?_ijt=ifi338tcgksrbcml628p0jmvkk:16) at u (jquery.min.js:2) at Object.fireWith [as resolveWith] (jquery.min.js:2) at k (jquery.min.js :2) 在 HTMLScriptElement.n (jquery.min.js:2) 在 HTMLScriptElement.dispatch (jquery.min.js:2) 在 HTMLScriptElement.y.handle (jquery.min.js:2) 这是使用 $.each(data.MRData.DriverTable.Drivers, function (i,item) 我知道这是我使用 item.MRData.DriverTable.Drivers.familyName 而不是 item.FamilyName 的变量,顺便谢谢

以上是关于使用jquery ajax从url加载json文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery easyui combobox如何动态加载.json数据

jQuery-Ajax请求Json数据并加载在前端页面,附视频教程讲解!

jQuery 中与Ajax相关的API

jquery 基础-Ajax应用

jQuery从ajax加载的内容中替换字符串

使用 AJAX Jquery 以 JSON 格式显示检索到的图像 URL