ajax之菜谱案例

思路:使用jQuery中的ajax方法,并使用jsonp,得到来自聚合数据返回的菜单数据,然后动态生成标签嵌套数据。
关键知识:jQuery中ajax(),jsonp

具体代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>菜谱</title>
  <style media="screen">
    .box {
    width: 500px;
    margin: 40px auto;
  }
    .all {
    margin-top: 30px;
  }
  .xh {
    float: left;
    margin-right: 20px;
    color: red;
    font-style: italic;
    font-size: 30px;
  }
  #menu {
    width: 500px;
  }
  </style>
</head>

<body>
  <div class="box">
    <input type="text" id="txt" placeholder="请输入菜名" />
    <input type="button" value="search" id="btn" />
    <div id="menu">
    </div>
  </div>

</body>
<script src="jquery-1.11.2.js">
</script>
<script type="text/javascript">
  $(function() {
    $("#btn").click(function() {
      var txt = $("#txt").val();
      var menu = $("#menu");
      menu.text("正在加载...")
      $.ajax({
        type: 'get',
        url: 'http://apis.juhe.cn/cook/query?key=035ab7995ec39cc741917e094142333e&rn=5&pn=3&menu=' + txt,
        dataType: 'jsonp',
        async: true,
        success: function(data) {
          menu.text('');
          if (data.result == null) {
            menu.text("抱歉,查询无结果");
            return;
          }
          var return_data = data.result.data;
          //动态创建菜谱
          $.each(return_data, function(i, ele) {
            // ele指向每道菜的数据对象
            var all = $('<div class="all"></div>');
            menu.append(all);
            //名称
            var title = $('<h2>' + (i + 1) + '. 菜名:</h2>');
            title.append(ele.title);
            all.append(title);
            //简介
            var intro = $('<p class="intro">简介:</p>');
            intro.append(ele.imtro);
            all.append(intro);
            //成品图
            $.each(ele.albums, function(j, pics) {
              var pic = $('<img src="' + pics + '">');
              all.append(pic);
            });
            //主料
            var zl = $('<p class="zl">主料:</p>');
            zl.append(ele.ingredients);
            all.append(zl);
            //辅料
            var fl = $('<p class="fl">辅料:</p>');
            fl.append(ele.burden);
            all.append(fl);
            //做菜步骤
            var steps = $('<div class="steps">开始吧:</div>');
            all.append(steps);
            //遍历步骤并动态添加
            $.each(ele.steps, function(k, step) {
              //step为每步的数据(包含文字和图片)
              var step_text = $('<p></p>');
              step_text.append(step.step);
              steps.append(step_text);
              var step_pic = $('<p><img src="' + step.img + '"></p>');
              steps.append(step_pic);
            });
          });
        },
        error: function() {
          alert("失败");
        }
      });
    });
  });
</script>
</html>

方法2:鉴于上述代码中动态生成标签并添加的代码过多,使用artTemplate模板简化

具体代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>菜谱</title>
  <style media="screen">
    .box {
    width: 500px;
    margin: 40px auto;
  }
    .all {
    margin-top: 30px;
  }
  .xh {
    float: left;
    margin-right: 20px;
    color: red;
    font-style: italic;
    font-size: 30px;
  }
  #menu {
    width: 500px;
  }
  </style>
</head>

<body>
  <div class="box">
    <input type="text" id="txt" placeholder="请输入菜名" />
    <input type="button" value="search" id="btn" />
    <div id="menu">
    </div>
  </div>

</body>
<!-- 模板 -->
<script type="text/html" id="tpl">
  <% for(var i=0;i< data.length;i++) {%>
  <div class="all">
      <h2>菜名:<%= data[i].title %></h2>
      <p class="intro">简介:<%= data[i].imtro %></p>
      <% for(var j=0;j< data[i].albums.length;j++) {%>
        <img src=""<%= data[i].albums[j] %>"">
      <% } %>
      <p class="zl">主料:<%= data[i].ingredients %></p>
      <p class="fl">辅料:<%= data[i].burden %></p>
      <% for(var k=0;k< data[i].steps.length;k++) {%>
        <div class="steps">
            <p><%= data[i].steps[k].step %></p>
            <p><img src="<%= data[i].steps[k].img %>"></p>
        </div>
      <% } %>
  </div>
  <% } %>
</script>
<script src="jquery-1.11.2.js">
</script>
<script src="template-native-debug.js">
</script>
<script type="text/javascript">
  $(function() {
    $("#btn").click(function() {
      var txt = $("#txt").val();
      var menu = $("#menu");
      menu.text("正在加载...")
      $.ajax({
        type: 'get',
        url: 'http://apis.juhe.cn/cook/query?key=035ab7995ec39cc741917e094142333e&rn=5&pn=3&menu=' + txt,
        dataType: 'jsonp',
        async: true,
        success: function(data) {
          //清空容器
          menu.text('');
          if (data.result == null) {
            menu.text("抱歉,查询无结果");
            return;
          }
          //调用模板
          var temp = template('tpl', data.result);
          menu.html(temp);
        },
        error: function() {
          alert("失败");
        }
      });
    });
  });
</script>


</html>

具体效果:菜谱

发布了95 篇原创文章 · 获赞 43 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/lyxuefeng/article/details/84141299