当AJAX中请求参数过大时进入error 出现黄叹号 Provisional headers are shown

本文记录了解决Ueditor富文本编辑器在特定环境下上传表单内容时遇到的问题过程。通过调整contentType设置为'application/json;charset=UTF-8'并相应修改前后端代码,最终解决了ajax上传时进入error方法的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 问题概述

在对一段表单内容(包含Ueditor富文本编辑器)进行ajax上传到后台的时候,发现进入error方法。下面详细分析一下我解决问题的过程

问题表现:第一次提交form表单ajax返回成功,此时Ueditor中有十几张图片(图片地址),下一次或者之后的几次,不管提交提交表单的内容是多是少,只要提交就进入到error方法。

查看方法时,出现了黄色叹号Provisional headers are shown

  • 确定问题

本地环境、生产环境没有问题,问题只有在测试环境出现,另外在测试人员的电脑上问题出现比较频繁,在我的电脑上出现的概率很小,我觉得问题可能发生在以下几个方面

1.环境配置问题,例如nginx或tomcat对request限制了长度或者大小

2.Ueditor缓存问题

3.电脑配置不同,导致浏览器缓存大小不同问题

  • 排查问题

1.发现nginx日志有报错 

*19052750 an upstream response is buffered to a temporary file

解决办法:增加fastcgi_buffers 8 4K; fastcgi_buffer_size 4K; 失败

具体看:https://www.cnblogs.com/littlewrong/p/7076459.html

2.可能是因为走了缓存,所以想办法让ajax请求不走缓存

请求路径加一个随机数  失败

header加入  XMLHttpRequest.setRequestHeader("Cache-Control","no-cache");    失败

还有说因为跳转过快执行了后面的代码,所以在ajax后面使用return false     失败

。。。。。。此时我的内心是崩溃的,到现在可能我连问题出在哪里都不知道

3.最后的最后,我觉得问题还是应该     在ajax post请求,参数过大产生的问题
 

于是乎一直百度谷歌,发现之前我的请求头中的contentType为form表单自动变为了

contentType: 'application/x-www-form-urlencoded'

于是确定了解决方案

  • 解决方案

改为contentType: 'application/json; charset=UTF-8'

/**
*
*  1.data用json.stringfy包住
*
**/
data :JSON.stringify({'xxx':'xxx','xxx':'xxx'}),
dataType : 'json',
/**
* 重点
*2.指定contentType为application/json; charset=UTF-8
*
**/
contentType: 'application/json; charset=UTF-8',

...

后端代码也需要改动一下

StringBuilder sb = new StringBuilder();
try (BufferedReader reader = request.getReader();) {
		char[] buff = new char[1024*1024];
		int len;
		while ((len = reader.read(buff)) != -1) {
			sb.append(buff, 0, len);
		}
	} catch (IOException e) {
		result.setSuccess(false);
		result.setMsg("修改商品失败");
		e.printStackTrace();
	}
JSONObject jobject = JSONObject.fromObject(sb.toString());
//获取request中值
String goods_id = jobject.getString("goods_id");
......

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值