ajax请求接口,偶发,返回数据格式异常,正确的数据前面会多拼一段前端提交的数据。
服务端用的php(5.3.29)写的接口,前端用jquery(3.3.1)的ajax请求,接口稳定运行了三四年,今天中午睡了一觉,突然出了问题。
提交的数据是base64转过的,大概类似这样:eyJhY3Rpb24iOiJzZWxlY3RGcm9
正确的返回结果应该是个json字符串,类似这样:{“meg”:”ok”}
现在每次请求接口,会有大概一半左右的概率,服务器会返回这样的数据:
eyJhY3Rpb24iOiJzZWxlY3RGcm9{“meg”:”ok”}
就是把前端提交的数据拼在了正确的返回结果前面。
也不是每次都这样,正确的返回和错误的返回大概各占一半吧。
各路大神看看这是为啥呢。
大中午的,也没人改服务器的设置啊。
代码有bug吧,有没有echo 之类的调试
大概率php代码有打印的代码。正常和异常都有,那应该在某段判断代码中
补充,之前出问题的是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了??
有检查过php返回的数据就是两个拼接在一起的吗?如果在一起的,那就是ajax的提交在一定概率上触发了部分调试返回。 合理猜测你服务器被入侵了代码被改过了
auto_prepend_file
auto_append_file
如果配置等于php://input
就会将post数据进行输出,可能是遭到了攻击被修改配置了,建议 phpinfo() 查看这两个配置2023.06.16 补充:
把$.ajax()请求里的 contentType:"application/x-www-form-urlencoded", 这一部分去掉,问题就解决了。 PS:仍然不知道为啥……