zoukankan      html  css  js  c++  java
  • 工作日记(十):完整项目开发之vue跨域、js发送get与post请求、js中json与字符串的互相转化

    2020.7.20

    今天继续开发前端vue。

    遇到了一个问题:

    在前后端分离的情况下,本地启动了前端项目与后端项目后,由于端口不一致的问题,导致前端调用后端接口时报错403,跨域,没有权限访问。

    vue跨域解决方法(本地测试时):

    1.可以在后端Controller上加注解,@CrossOrigin,这样后端就支持跨域访问了;

    2.在前端vue项目的【项目/vue.config.js】中的"devServer:"标签下,删掉这一句:

    before: require('./mock/mock-server.js'),
    

    并且在相同位置增加这一句:

    proxy:{
      "/":{
        target: "http://127.0.0.1:8080",  //改为本地项目的端口
        changeOrigin: true  //需要虚拟主机站点
      }
    }

    3.由于删掉了mock-server.js,因此项目自带登录页面不能使用了(可以显示页面,不过点击登录按钮无法正常登录),需要想办法绕过去。

    *4.找到【项目/src/utils/request.js】,找到"service.interceptors.request.use(...)"标签,在这个标签的"config =>{"中增加这一句:

    config.headers['content-type'] = 'application/json'

    这一步是由于本人想直接使用【项目/src/api/article.js】中的方法,并且报文是以json格式发送的,所以才加上。(直接在article.js中增加headers无效,并且后台没有收到请求头的contentType:application/json会报错。)

    5.由于修改了配置文件js,因此需要重启项目。

    //实际上本人暂时没有成功测试这个方法。

    //原因如下:

    //本人暂时没有绕过去项目自带的登录页面;这些自测用代码修改后不能提交,自我感觉会搞乱代码;还有其它前端任务没有完成。

    //因此本人选择了只记录步骤,然后继续进行前端开发工作。

    (生产上怎么办到时候再说,不急)

    vue获取假数据的方法(待完善):

    本人的前端项目,目前在获取数据时都用的假数据(还没人写与后端联调的方法),也就是【项目/src/api/article.js】中的方法,如下:

    import request from '@/utils/request'
    
    export function getList(query){
      return request({
        url: '/vue-element-admin/article/list',
        method: 'get',
        params: query
      })
    }
    
    export function getDetail(query){
      ......
    }

    这个方法好像与【项目/mock/article.js】中的方法有关系,就在mock/article.js里写假数据,不过本人还是没搞懂(假数据有中文,但是这个mock里没有中文,嗯......)

    js发送get请求与post请求(jquery发送ajax):

    发送get请求:

     $.ajax({
            type: "GET",
    		async: false,
            url: "http://www.baidu.com",
            data: { 'page': '1', limit: 5 },
            //dataType: "JSON",
    		contentType: "application/x-www-form-urlencoded",
            success: function(result) {},
    		error: function(result) {}
          });

    发送post请求(常用,json):

    var jsonObj = {"id":"test","content":""};	  
    $.ajax({
            type: "POST",
    		async: false,
            url: "http://www.baidu.com",
            data: JSON.stringify(jsonObj),
    		contentType: "application/json",
            success: function(result) {},
    		error: function(result) {}
          });
    	  

    需要注意的点:

    1.async,Boolean 类型参数,默认设置为 true,当为 true 表示发送异步请求,当为 false 表示发送同步请求;测试时经常设置为同步(false)。

    2. contentType,String 类型参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded";一般不设置或者设置为"application/json;charset=utf-8"来发送json格式的数据。

    3. dataType,String 类型的参数,指定服务器返回的数据类型;一般不设置。

    4.在发送Ajax请求时浏览器会将当前地址添加到要请求的地址前面;需要在请求地址前面加上http请求头(http://)。

    5.如果想使用post发送键值对的参数,将第一个例子的【get】改为【post】即可。

    js中json与字符串的转化:

    字符串转json:

    var str1 = "{"id":"1\n\r23","content":"abc"}";
    var json1 = JSON.parse(str1);
    console.log(json1.id);

    json转字符串:

    var jsonObj = {"id":"test","content":""};
    var jsonTxt = JSON.stringify(jsonObj);
    console.log(jsonTxt);
  • 相关阅读:
    【无中生有】---4----数据库设计-3
    【无中生有】---2---数据库设计-1
    redis3.0的demo实验
    redis3.0的demo实验
    那些在学习iOS开发前就应该知道的事(part 1)
    模板文件中的插件嵌入点列表
    图像处理框架 Core Image 介绍
    sharepoint services
    DiscuzX2.5数据库字典 值得学习
    Sublime Text 使用技巧
  • 原文地址:https://www.cnblogs.com/codeToSuccess/p/13906201.html
Copyright © 2011-2022 走看看