为什么我的请求会有400状态码?
来源:3-3 项目作业
soso_crazy
2019-08-23 16:17:29
出现400后然后再请求成功?
出现了400状态码导致我的swiper出现问题
------------------------------------------------------------------
// product.js
import jsonp from 'assets/js/jsonp';
import {jsonpOptions} from './config';
// 获取搜索结果数据--jsonp
export const getProductDetail = (id) => {
const url = 'https://unszacs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/';
const params = {
api: 'mtop.taobao.detail.getdetail',
ttid: '2017%40taobao_h5_6.6.0',
data: `%7B"itemNumId"%3A"${id}"%7D`,
appkey: 12574478,
dataType: 'jsonp',
type: 'jsonp',
v: '6.0'
};
// jsonp代表调用开头引入封装好的jsonp.js,指向的是jsonp.js中暴露的方法export default (url, data, options),返回的是Promise对象
return jsonp(url, params, jsonpOptions).then(res => {
if (res.data) {
return res.data;
}
throw new Error('没有获取到数据!');
}).catch(err => {
console.log(err);
}).then(res => { // res接收返回来的数据
return new Promise(resolve => {
setTimeout(() => {
resolve(res); // 1s后将请求回来的数据发送出去
}, 1000);
});
});
};
------------------------------------------------------------- //index.vue <template> <transition name="product"> <!--首页recommend点击跳转到商品详情页,已经离开根节点(可以理解为根目录),所以没有动画效果。使用v-if条件渲染即使不是根节点都可以使用transition过渡效果,在挂着组件的mounted生命周期里改变isShow的值--> <div class="product" v-if="isShow"> <header class="g-header-container"> <product-header @go-back="goBack"></product-header> <product-slider :details="details"></product-slider> <product-detail></product-detail> </header> <div class="g-content-container"></div> <div class="product-tabbar-container"></div> </div> </transition> </template> <script> import ProductHeader from './header'; import ProductSlider from './slider'; import ProductDetail from './detail'; import {getProductDetail} from 'api/product.js'; export default { name: 'product', components: { ProductHeader, ProductSlider, ProductDetail }, data() { return { isShow: false, details: {} }; }, created() { this.getProductData(); }, methods: { goBack() { this.$router.back(); }, getProductData() { return getProductDetail(this.$route.params.id).then(data => { // 如果请求不成功,data接收的是undefined if (data) { // 赋给details传递给子组件 this.details = data; } }); } }, mounted() { this.isShow = true; } }; </script> <style lang="scss" scoped> // 因为vue创建的是单页面应用,所以想要点击商品后显示商品详情页的页面显示需要设置层级z-index @import "~assets/scss/mixins"; .product{ overflow: hidden; position: absolute; top: 0; left: 0; z-index: $product-z-index; width: 100%; height: 100%; background-color: white; } // 在Vue 提供了 transition 的封装组件中,只有4种情况可以给元素和组件添加进入/离开过渡 //1.条件渲染 (使用 v-if) //2.条件展示 (使用 v-show) //3.动态组件 //4.组件根节点 // 用transition包裹product页面起到过渡效果 .product-enter-active, .product-leave-active{ transition: all 0.5s; } .product-enter, .product-leave-to{ transform: translate3d(100%, 0, 0); } </style> ----------------------------------------------------- //slider/vue <template> <div class="slider-wrapper"> <me-loading v-if="data.length===0"></me-loading> <me-slider :direction="direction" :loop="loop" :interval="interval" :pagination="pagination" v-else> <swiper-slide v-for="(item, index) in data" :key="index"> <img :src="item" alt="" class="slider-img"> </swiper-slide> </me-slider> </div> </template> <script> import {swiperSlide} from 'vue-awesome-swiper'; import {swiperOptions} from './config'; import MeSlider from 'base/slider'; import MeLoading from 'base/loading'; export default { name: 'ProductSlider', components: { MeSlider, MeLoading, swiperSlide }, data() { return { direction: swiperOptions.direction, loop: swiperOptions.loop, interval: swiperOptions.interval, pagination: swiperOptions.pagination, data: [] }; }, props: { details: { type: Object, default() { return {}; } } }, methods: { getProduct() { // 请求数据是异步的, 与子组件渲染的过程中有一个时间差的问题,所以直接在子组件的mounted中访问不到,需要延时 setTimeout(() => { console.log('detail', this.details); this.data = this.details.item.images; }, 2000); } }, beforeMount() { this.getProduct(); }, watch: { details(val) { this.data = val; } } }; </script> <style lang="scss" scoped> @import "~assets/scss/mixins"; .slider-wrapper{ height: 283px; } .slider-img{ width: 100%; height: 100%; } </style>
1回答
好帮手慕言
2019-08-23
同学你好,因为没有同学完整的项目代码,不能准确的定位问题,同学看一下私信,老师在私信帮助解决。
祝学习愉快~
相似问题