zoukankan      html  css  js  c++  java
  • vue中如何获取后台数据

    原文链接http://blog.csdn.net/vergilgeekopen/article/details/68954940

    需要引用vue-resource

    安装请参考https://github.com/pagekit/vue-resource官方文档

    在入口函数中加入

    import VueResource from 'vue-resource'
    Vue.use(VueResource);
    

    在package.json文件中加入

     "dependencies": {
        "vue": "^2.2.6",
        "vue-resource":"^1.2.1"
      },
    

    请求如下

    mounted: function () {
            // GET /someUrl
            this.$http.get('http://localhost:8088/test').then(response => {
                 console.log(response.data);
                // get body data
                // this.someData = response.body;
    
            }, response => {
                console.log("error");
            });
        },
    

    注意

    1.在请求接口数据时,涉及到跨域请求 
    出现下面错误: 
    XMLHttpRequest cannot load http://localhost:8088/test. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8080’ is therefore not allowed access.

    解决办法:在接口中设置

    response.setHeader("Access-Control-Allow-Origin", "*");
    

    2.使用jsonp请求 

    但是出现如下错误 
    Uncaught SyntaxError: Unexpected token 
    查看请求,数据已返回,未解决.

    提交表单

      <div id="app-7">
            <form @submit.prevent="submit">
                <div class="field">
                    姓名:
                    <input type="text"
                           v-model="user.username">
                </div>
    
    
                <div class="field">
                    密码:
                    <input type="text"
                           v-model="user.password">
                </div>
    
    
                <input type="submit"
                       value="提交">
                </form>
        </div>
    
    methods: {
            submit: function() {
              var formData = JSON.stringify(this.user); // 这里才是你的表单数据
    
              this.$http.post('http://localhost:8088/post', formData).then((response) => {
                  // success callback
                  console.log(response.data);
              }, (response) => {
                   console.log("error");
                  // error callback
              });
            }
        },
    

      

     

    提交restful接口出现跨域请求的问题 

    查阅资料得知, 

    当contentType设置为三个常用的格式以外的格式,如“application/json”时,会先发送一个试探的OPTIONS类型的请求给服务端。在这时,单纯的在业务接口response添加Access-Control-Allow-Origin 由于还没有走到所以不会起作用。

    解决方案: 
    在服务端增加一个拦截器 
    用于处理所有请求并加上允许跨域的

    public class CommonInterceptor implements HandlerInterceptor {
    
    
        private List<String> excludedUrls;
    
        public List<String> getExcludedUrls() {
            return excludedUrls;
        }
    
        public void setExcludedUrls(List<String> excludedUrls) {
            this.excludedUrls = excludedUrls;
        }
    
        /**
         *
         * 在业务处理器处理请求之前被调用 如果返回false
         * 从当前的拦截器往回执行所有拦截器的afterCompletion(),
         * 再退出拦截器链, 如果返回true 执行下一个拦截器,
         * 直到所有的拦截器都执行完毕 再执行被拦截的Controller
         * 然后进入拦截器链,
         * 从最后一个拦截器往回执行所有的postHandle()
         * 接着再从最后一个拦截器往回执行所有的afterCompletion()
         *
         * @param  request
         *
         * @param  response
         */
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                                 Object handler) throws Exception {
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "*");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers",
                    "Origin, X-Requested-With, Content-Type, Accept");
            return true;
        }
    
        // 在业务处理器处理请求执行完成后,生成视图之前执行的动作
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                               ModelAndView modelAndView) throws Exception {
    
        }
    
        /**
         *
         * 在DispatcherServlet完全处理完请求后被调用
         * 当有拦截器抛出异常时,
         * 会从当前拦截器往回执行所有的拦截器的afterCompletion()
         *
         * @param request
         *
         * @param response
         *
         * @param handler
         *
         */
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                    Object handler, Exception ex) throws Exception {
    
        }
    }

    spring resultful无法像在jsp提交表单一样处理数据必须加上@RequestBody,可以直接json转换object,但是对与没有bean的表单数据,建议转换为map对象,类似@RequestBody Map
  • 相关阅读:
    JQuery中的id选择器含有特殊字符时,不能选中dom元素
    解决Mac下MySQL登录问题
    Mac 安装mysql
    禁止chrome浏览器自动填充表单的解决方案
    Eclipse 编译错误 Access restriction: The type 'JPEGCodec' is not API (restriction on required library 'C:Program FilesJavajre7lib t.jar')
    羊皮纸月亮计划
    ActionSupport.getText()方法
    linux入门经验之谈
    tomcat设置默认启动项
    网页设置下载apk
  • 原文地址:https://www.cnblogs.com/zr123/p/8178817.html
Copyright © 2011-2022 走看看