项目中使用了EasyUI的下拉选择框,在远程获取下拉选择框数据时,发送的请求报错,错误码400,原因是参数中有“[object Object]”。
- 我先查看了EasyUI的源代码,发现发送Ajax请求的源码中,直接将一个空对象“{}”作为“data”的参数,导致了最后的请求中带上了多余的部分。
- 于是我又查看了jQuery(1.12.4)的源码,发现其中有一个对于空对象的判断,
if({})
这种判断在JavaScript中为真,进入了一段在URL后面添加“data”属性的逻辑,直接连接字符串会把空对象变成“[object Object]”添加到最终的URL后面。
if ( s.data ) {
cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
delete s.data;
}
- 上述的行为,导致Tomcat的某个版本之后,认为这种URL是非法的,从而抛异常,返回400错误码。
要解决以上问题,可以降低Tomcat版本,或者选择其他认可这种URL的Web容器。或者对Tomcat进行一些设置(可自行搜索相关异常信息,找到设置的方法)。