ajax请求接口,偶发,返回数据格式异常,正确的数据前面会多拼一段前端提交的数据。

服务端用的php(5.3.29)写的接口,前端用jquery(3.3.1)的ajax请求,接口稳定运行了三四年,今天中午睡了一觉,突然出了问题。
提交的数据是base64转过的,大概类似这样:eyJhY3Rpb24iOiJzZWxlY3RGcm9

正确的返回结果应该是个json字符串,类似这样:{“meg”:”ok”}

现在每次请求接口,会有大概一半左右的概率,服务器会返回这样的数据:
eyJhY3Rpb24iOiJzZWxlY3RGcm9{“meg”:”ok”}

就是把前端提交的数据拼在了正确的返回结果前面。
也不是每次都这样,正确的返回和错误的返回大概各占一半吧。
各路大神看看这是为啥呢。
大中午的,也没人改服务器的设置啊。

讨论数量: 10

代码有bug吧,有没有echo 之类的调试

10个月前 评论

大概率php代码有打印的代码。正常和异常都有,那应该在某段判断代码中

10个月前 评论
chen1943a (楼主) 10个月前

补充,之前出问题的是jquery的 $.ajax({ type: "POST", url: _url, contentType:"application/x-www-form-urlencoded", data: _data, dataType: _type, success: function (data) { _fun(data); }, error:function(XMLHttpRequest, textStatus, errorThrown){ console.log(errorThrown); that.$message({ message: '服务器没有响应', type: 'error' }); } });

后来改了一下请求方式,用XMLHttpRequest()对象来发送表单数据,就一切正常了: var formData = new FormData(); formData.append("data64",dataStr); var xhr = new XMLHttpRequest(); xhr.open('POST', _url, true) xhr.send(formData); xhr.onreadystatechange = function () { //后端接受完毕 if(xhr.readyState == 4){ _fun(xhr.responseText); } };

所以也不知道为啥本来好好的$.ajax请求,突然就bug了??

10个月前 评论

有检查过php返回的数据就是两个拼接在一起的吗?如果在一起的,那就是ajax的提交在一定概率上触发了部分调试返回。 合理猜测你服务器被入侵了代码被改过了

10个月前 评论
deatil (作者) 10个月前
chen1943a (楼主) 10个月前
  • 我遇到过,post 请求会将 post 的数据响应回来
  • php 配置有两个配置 auto_prepend_file auto_append_file 如果配置等于 php://input 就会将post数据进行输出,可能是遭到了攻击被修改配置了,建议 phpinfo() 查看这两个配置
10个月前 评论
chen1943a (楼主) 10个月前

2023.06.16 补充:

把$.ajax()请求里的 contentType:"application/x-www-form-urlencoded", 这一部分去掉,问题就解决了。 PS:仍然不知道为啥……

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!