天天看点

2021-02-28 uni-app数据传输前后联调项目场景:uni-app数据传输前后联调问题描述:前端数据传输,后端服务器显示错误 status:400原因分析:总结:

项目场景:uni-app数据传输前后联调

问题描述:前端数据传输,后端服务器显示错误 status:400

数据传输过程中后端返回错误 400,出现 Bad request

2021-02-28 uni-app数据传输前后联调项目场景:uni-app数据传输前后联调问题描述:前端数据传输,后端服务器显示错误 status:400原因分析:总结:

APP 中接收数据代码:

abc(){
uni.request({
	url: 'http://42.194.167.218:8080/publish/insertPuslish', 
	Data: {
		'userId':7,//随意,暂时写2吧
		'image':""+this.publishData.images, //Base64格式(仅传入一张图片)
		'name':""+this.publishData.name,// 传入名称
		'text':""+this.publishData.inputContent,//moment文字部分
		'price':this.publishData.price,//传入定价
		'brand':""+this.publishData.name02,//传入品牌
		'color':""+this.publishData.color,//传入成色
		'basicClass':""+this.publishData.baseClass,//传入基本类型
		'detailClass':""+this.publishData.detailClass ,//传入具体类型
	},
	method: 'POST',
	dataType: 'json',
	success: (res) => {
	  console.log(this.publishData);
	  console.log(res.data);  //控制台打印这一整条数据
	  if(res.data= '插入成功'){
			uni.showToast({
				icon:'success',
				title:"发布成功"
			}) 
	  }else{
	  	console.log("error: " + JSON.stringify(res));
	  	console.log("有问题");
	  } 
	},
});
},       
           

一开始,在调试的过程当中,以为自己的参数传输有问题,遇到这种情况,可以考虑直接把传参改成对应的固定值(把参数写死),前提是你需要跟后端的同学商量好每个参数的类型,如果改成固定值之后,如果能跑通,说明的传参方面的问题。

如果是改成固定值之后发现还是跑不通,那说明请求本身可能还是有问题

原因分析:

找到uni-app对应的官方API文档,查看uni.request方法相关的信息

https://uniapp.dcloud.io/api/request/request?id=request

uni.request({
    url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
    data: {
        text: 'uni.request'
    },
    header: {
        'custom-header': 'hello' //自定义请求头信息
    },
    success: (res) => {
        console.log(res.data);
        this.text = 'request success';
    }
});
           

和自己的代码进行对比之后发现,应该将大写的Data改为小写的data,细节性的问题需要注意,严格按照示例代码的格式来写

总结:

通常产生问题的原因也有两个:

1、前端传的参数类型或者名称与后台接收参数的实体类的属性类型或者名称不一致;

2、前端提交ajax请求的数据应该是json格式字符串的,但是却没有将对象转换成json格式的字符串。

3、请求格式本身有问题

4xx(请求错误)

这些状态码表示请求可能出错,妨碍了服务器的处理。

400(错误请求)服务器不理解请求的语法。

401(未授权)请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。

403(禁止)服务器拒绝请求。如果您在 Googlebot 尝试抓取您网站上的有效网页时看到此状态码(您可以在 Google 网站管理员工具诊断下的网络抓取页面上看到此信息),可能是您的服务器或主机拒绝了 Googlebot 访问。

404(未找到)服务器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。

如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具"诊断"标签的 robots.txt 页上看到此状态码,则这是正确的状态码。但是,如果您有 robots.txt 文件而又看到此状态码,则说明您的 robots.txt 文件可能命名错误或位于错误的位置(该文件应当位于顶级域,名为 robots.txt)。

如果对于 Googlebot 抓取的网址看到此状态码(在"诊断"标签的 HTTP 错误页面上),则表示 Googlebot 跟随的可能是另一个页面的无效链接(是旧链接或输入有误的链接)。

405(方法禁用)禁用请求中指定的方法。

406(不接受)无法使用请求的内容特性响应请求的网页。

407(需要代理授权)此状态码与 401(未授权)类似,但指定请求者应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。

408(请求超时)服务器等候请求时发生超时。

409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,以及两个请求的差异列表。

410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301 指定资源的新位置。

411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。

412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。

413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。

415(不支持的媒体类型)请求的格式不受请求页面的支持。

416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态码。

417(未满足期望值)服务器未满足"期望"请求标头字段的要求。

继续阅读