老师,还是加载热卖推荐数据问题,没有数据

来源:6-1 上拉加载更多

qq_莫名的眼泪_0

2020-02-21 15:53:34

jsonp.js

// 对jsonp进行封装
// 引入jsonp
import jsonp from 'jsonp';

/*
   目的是将
   param相当于{}对象
   {
       page:1,
       psize:20
   }
   转换成page=1&psize=20

*/
const parseParam = param => {
   let params = [];
   for(const key in param){
       // 将上方param对象变成[[page, 1], [psize, 20]]
       params.push([key, encodeURIComponent(param[key])]);
       // params.map(value => value.join('='))将上一步的param对象变成[page=1, psize=20]
       // 在后边加上.join('&')就将[page=1, psize=20]转换成page=1&psize=20了
       return params.map(value => value.join('=')).join('&');
   }
}

export default (url, data, options) => {
   //判断路径是否有问号,如果没有?就加个?,如果有?直接加&连字符  (url.indexOf('?') < 0 ? '?' : '&')
   url += (url.indexOf('?') < 0 ? '?' : '&') + parseParam(data);
   return new Promise((resolve, reject) => {
       jsonp(url, options, (err, data) => {
           if(err){
               // 如果有错误,调reject
               reject(err);
           }else{
               // 如果没错误,调resolve
               resolve(data);
           }
       })
   })
}

api下的config.js

//定义调用数据之后成功的code码
export const SUCC_CODE = 0;

//定义获取数据超时的毫秒数
export const TIMEOUT = 10000;

//定义推荐下的每页的条数
export const HOME_RECOMMEND_PAGE_SIZE = 20;

export const jsonpOptions = {
   param: 'callback',
   timeout: TIMEOUT
}

home.js下的

// 引入jsonp
import jsonp from 'assets/js/jsonp';
import {SUCC_CODE, TIMEOUT, HOME_RECOMMEND_PAGE_SIZE, jsonpOptions} from './config';

// 获取热门推荐数据 --jsonp
export const getHomeRecommend = (page = 1, psize = HOME_RECOMMEND_PAGE_SIZE) => {
   const url = 'https://ju.taobao.com/json/tg/ajaxGetItemsV2.json';
   const params = {
       page,
       psize,
       type: 0,
       frontCatId: ''
   };
   return jsonp(url, params, jsonpOptions).then(res => {
       if(res.code === '200'){
           return res;
       }

       throw new Error('没有成功获取到数据!');
   }).catch(err => {
       if(err){
           console.log(err);
       }
   }).then(data => {
       return new Promise(resolve => {
           setTimeout(() => {
               resolve(data);
           },1000);
       });
   })
}


recommend.vue下的

<template>
   <div class="recommend">
       <h3 class="recommend-title">热卖推荐</h3>
       <div class="loading-container" v-if="!recommends.length">
           <me-loading inline></me-loading>
       </div>
       <ul class="recommend-list" v-else>
           <li class="recommend-item"
               v-for="(item, index) in recommends"
               :key="index"
           >
               <router-link class="recommend-link"
                   :to="{name: 'home-product', params: {id: item.baseinfo.itemId}}"
               >
                   <!--
                       用法:
                       将:src换成v-lazy
                   -->
                   <p class="recommend-pic"><img v-lazy="item.baseinfo.picUrlNew" class="recommend-img" alt=""></p>
                   <p class="recommend-name">{{item.name.shortName}}</p>
                   <p class="recommend-origPrice"><del>¥{{item.price.origPrice}}</del></p>
                   <p class="recommend-info">
                       <span class="recommend-price">¥<strong class="recommend-price-num">{{item.price.actPrice}}</strong></span>
                       <span class="recommend-count">{{item.remind.soldCount}}件已售</span>
                   </p>
               </router-link>
           </li>
       </ul>
   </div>
</template>

<script>
   //  引入组件
   import {getHomeRecommend} from 'api/home';
   import MeLoading from 'base/loading';
   export default {
       name: 'HomeRecommend',
       components:{
           // 注册组件
           MeLoading
       },
       data(){
           return{
               recommends: [],
               curPage: 1,
               totalPage: 1
           }
       },
       created(){
           // 调用组件
           // 获取第一页的数据
           this.getRecommend();
       },
       methods: {
           getRecommend(){
               if(this.curPage > this.totalPage){
                   return Promise.reject(new Error('没有更多了'));
               }
               return getHomeRecommend(this.curPage).then(data => {
                   return new Promise(resolve => {
                       if(data){
                           console.log(data);
                           this.curPage++;
                           this.totalPage = data.totalPage;
                           this.recommends = this.recommends.concat(data.itemList);
                           //等异步数据加载完更新滚动条
                           this.$emit('loaded', this.recommends);
                           resolve();
                       }
                   })
               })
           }
       }
   }
</script>


写回答

1回答

好帮手慕星星

2020-02-21

同学你好,封装的jsonp文件有问题,return内容应该放在for循环外:

http://img.mukewang.com/climg/5e4fb5f1098e149808060254.jpg

修改之后就正确了。

祝学习愉快!

0

0 学习 · 10739 问题

查看课程