• vue初级学习--使用 vue-resource 请求数据


    一、导语

      我发现好像我最近几次写文,都是在7号,很恰巧啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    二、正文

      最近用vue做一个订单管理混合开发APP,但是遇到个问题,使用了vueResource的post请求,后端做了跨域解决方案,可是前端还是请求不出去,最后才发现,其实还是有问题,其实踩到这个坑,根本原因,是没把form data和request payload的区别搞懂,所以建议大家还是找找资料,搞搞清楚

      1、浅谈 form data和request payload的区别

    • form date  

      get请求,是将请求参数以&方法,拼接在url后面,如:http://www.baidu.com?name=23&password=8888;   

      真正可以明显看出区分的是在post请求上,

      post请求时,头文件 中Content-Type 是默认值  application/x-www-form-urlencoded,参数是放在 form date中的,如下情况

      

    • request payload

        post请求时,头文件 中Content-Type 是默认值  application/json;charset=UTF-8,参数是放在 request payload 中的。

        顺便说下 Content-Type 的参数,大家可以参考:http://tool.oschina.net/commons

      2、解决vue-resource post请求跨域问题

        

    vue提供了一个简单的解决方法,就是  Vue.http.options.emulateJSON = true; 其实等同于在headers中添加  'Content-Type': 'application/x-www-form-urlencoded'

    不过,更稳妥的方法是如此写:

    // 在路由的请求中如此设置
    Vue.http.options.emulateJSON = true
    Vue.http.options.xhr = { withCredentials: true }
    Vue.http.options.crossOrigin = true
    Vue.http.options.emulateHTTP = true
    Vue.http.options.root = URL.Purl // URL.Purl指的是服务器路径

    为何要如此写呢?感谢 我在寻找这问题时,看到的文章:https://segmentfault.com/a/1190000007087934 

     效果如下:

    所以大家可以愉快的这么运行vue-resource了

    getShopCartList() {
            this.$http.post(URL.ShopCartList, {
              openId: this.openId,
              userName: this.userName,
              accessToken: this.accessToken,
              sign: this.sign,
              shopId: this.shopId
            }).then(
              function (response) {
                this.$store.dispatch('update_loading', false)
                let status = response.body.status;
                if (status == 1) {
                  let result = response.body.result;
                  if (result !== null) {
                    this.cartGoodLis = [];
                    result.shopCarts.forEach((shopCartsItem) => {
                      if (shopCartsItem.cartItems.length == 1) {
                        this.cartGoodLis.push(shopCartsItem.cartItems[0])
                      } else {
                        shopCartsItem.cartItems.forEach((shopCartsItems) => {
                          this.cartGoodLis.push(shopCartsItems)
                        })
                      }
                    });
                  } else {
                    this.cartGoodLis = [];
                  }
                } else {
                  // Router.verificationToUser(status, response.body.msg);
                }
              }
            )
          }
    

     三、 结尾

    订单管理APP已经通过测试部的测试了,开心开心~~~~~~~~~~~~~~

  • 相关阅读:
    WPF常用TriggerAction用法 (一)
    一个WPF只能输入数字的行为。
    自定义panel实现,并实现item更改和移除动画。
    MVVM模式下弹出窗体
    ZAM 3D 制作简单的3D字幕 流程(二)
    ZAM 3D 制作简单的3D字幕 流程(一)
    ZAM 3D 制作3D动画字幕 用于Xaml导出
    Metro Win8风格的按钮(Filp翻转)
    WPF自动隐藏的消息框(鼠标放上去将一直显示,移开动画继续),提供normal和error两种边框。
    可分组的选择框控件(MVVM下)(Toggle样式 仿造单选框RadioButton,复选框CheckBox功能)
  • 原文地址:https://www.cnblogs.com/atjinna/p/7999803.html
Copyright © 2020-2023  润新知