老师请求失败,不知道为什么没有办法发送post请求

老师请求失败,不知道为什么没有办法发送post请求

<template>

<div class="order">

<div class="order__price">实付金额 <b>¥ {{calculations.price}}</b></div>

<div class="order__btn" @click="() => handleShowConfirmChange(true)">提交订单</div>

</div>

<div

class="mask"

v-show="showConfirm"

@click="() => handleShowConfirmChange(false)"

>

<div class="mask__content" @click.stop>

<!-- .stop 阻止事件的捕获 -->

<h3 class="mask__content__title">确认要离开收银台?</h3>

<p class="mask__content__desc">请尽快完成支付,否则将被取消</p>

<div class="mask__content__btns">

<div

class="mask__content__btn mask__content__btn--first"

@click="() => handleConfirmOrder(true)"

>取消订单</div>

<div

class="mask__content__btn mask__content__btn--last"

@click="() => handleConfirmOrder(false)"

>确认支付</div>

<Toast v-if="show" :message="toastMessage" />

</div>

</div>

</div>

</template>


<script>

import { ref } from 'vue'

import { useRouter, useRoute } from 'vue-router'

import { useStore } from 'vuex'

import { post } from '../../utils/request'

import { useCommonCartEffect } from '../../effects/cartEffects'

import Toast, { useToastEffeect } from "../../components/Toast.vue";


// 下单相关逻辑

const useMakeOrderEffect = (shopId, shopName, productList, showToast) => {

const router = useRouter()

const store = useStore()


const handleConfirmOrder = async (isCanceled) => {

const products = []

for(let i in productList.value) {

const product = productList.value[i]

products.push({id: parseInt(product._id, 10), num: product.count})

}

try {

const result = await post('/api/order', {

addressId: 1,

shopId,

shopName: shopName.value,

isCanceled,

products

})

if (result?.errno === 0) {

store.commit('clearCartData', shopId)

router.push({ name: 'Home' })

}

} catch (e) {

// 提示下单失败

showToast("请求失败");

}

}

return { handleConfirmOrder }

}


// 蒙层展示相关的逻辑

const useShowMaskEffect = () => {

const showConfirm = ref(false)

const handleShowConfirmChange = (status) => {

showConfirm.value = status

}

return { showConfirm, handleShowConfirmChange }

}


export default {

name: 'Order',

components: {

Toast: Toast,

},

setup() {

const route = useRoute()

const shopId = parseInt(route.params.id, 10)

const { show, toastMessage, showToast } = useToastEffeect();

const { calculations, shopName, productList } = useCommonCartEffect(shopId)

const { handleConfirmOrder } = useMakeOrderEffect(shopId, shopName, productList, showToast)

const { showConfirm, handleShowConfirmChange } = useShowMaskEffect()

return { show, toastMessage, showConfirm, handleShowConfirmChange, calculations, handleConfirmOrder }

}

}

</script>



https://img1.sycdn.imooc.com//climg/61340da209643fed06940536.jpg

https://img1.sycdn.imooc.com//climg/61340e820949c31709820264.jpg

https://img1.sycdn.imooc.com//climg/61340ec1091370f612860262.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕慕子 2021-09-05 14:20:57

同学你好,对于你的问题解答如下:

1、以源码为例,可以输出查看下clearCartData中传入的第一个参数值是什么,如下:

https://img1.sycdn.imooc.com//climg/61345db409976d7307340164.jpg

控制台输出结果如下:

https://img1.sycdn.imooc.com//climg/61345dbb0953854005340204.jpg

由测试结果可知,传入第二个参数值为一个数字,所以无论第二个参数名是shopId还是payload(名称是可以自定义),值都是一个数字,const { shopId } = payload; 这种写法无法解构到对应的shopId值,导致无法实现效果。

所以直接使用一个传入的值进行操作就可以了,即:state.cartList[shopId].productList = {}

2、不清楚同学完整的代码具体是什么样,可能是传递的参数不对,也可能是网速较慢导致了请求超时。

从同学提供的截图看,代码执行时是与AJAX有关的xhr.js文件中代码出现报错,如下:

https://img1.sycdn.imooc.com//climg/61346033096aebd907490265.jpg

3、对于xhr.js等,这种并不是我们自己创建的文件代码执行过程中出现报错提示,由于涉及到vue框架的底层代码,老师目前也没有很好的快速定位错误的解决办法、

给同学推荐一个方法:在猜测可能存在问题的代码中,结合console.log语句,在控制台查看输出的结果是否与自己预期一样,慢慢调试。

祝学习愉快~

好帮手慕慕子 2021-09-05 10:55:30

同学你好,在源码中测试同学粘贴的这段代码,是可以正常发送post请求的。

​建议同学检查下fastmock中url为/api/order的地址,对应的请求类型是否为post,如果不是的话,建议改为post后再测试下。示例:

https://img1.sycdn.imooc.com//climg/61343190099c678103110551.jpg

祝学习愉快~

  • 提问者 weixin_慕丝2377090 #1

    老师问题解决了,

    是在store里面的问题。

    老师关于代码有个问题,


    为什么这样就会报错呢?

    clearCartData(state, payload) {

    const { shopId } = payload;

    state.cartList[shopId].productList = {}

    }

    为什么这样就可以

    clearCartData(state, shopId) {

    state.cartList[shopId].productList = {}

    }

    而且提醒是请求超时,但为什么问题不是在AJAX请求里面出现的。请问根据报错信息该怎么定位错误啊?

    https://img1.sycdn.imooc.com//climg/613434c809e873ca12800456.jpg



    2021-09-05 11:09:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师