工作日记(十):完整项目开发之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);

 

posted @ 2020-07-21 10:33  codeToSuccess  阅读(668)  评论(0编辑  收藏  举报