如何在PHP中判断表单是否通过AJAX提交并按返回结果执行对应逻辑
问题说明
需判断AJAX POST请求是否提交完成,并根据服务端返回结果执行对应条件逻辑,现有回调处理逻辑无法正常运行。
现有AJAX请求代码:
$.ajax({ url: "addorderInfo.php", // 请求目标地址 type: "POST", // 请求类型 data: new FormData(this), // 提交的表单数据 contentType: false, // 不设置Content-Type请求头,让浏览器自动生成带分隔符的FormData请求头 cache: false, // 禁止缓存请求结果 processData:false, // 不处理提交的数据,直接传输FormData对象 success: handleResult });
现有回调处理逻辑:
function handleResult(data){ if(data == 'error'){ window.location.href ='404.php'; } else{ $( "#clearcart" ).click(); window.location.href = "ordercomplited.php"; } }
问题排查与修复方案
问题1:返回内容含多余空白字符
服务端输出error时可能附带了换行、空格等不可见空白字符,直接全等判断会失败,需先对返回内容做去空白处理,修改判断逻辑为:if(data.trim() == 'error'){如需兼容低版本IE可使用jQuery的
$.trim(data)方法。问题2:返回数据类型自动解析异常
jQuery的AJAX默认会自动识别返回内容的类型,若服务端返回头被误设置为JSON格式,返回内容会被自动解析为对象,和字符串比较永远为false,需在AJAX配置中显式指定返回数据类型为纯文本,添加配置项:dataType: 'text',问题3:未处理请求失败场景
现有代码只配置了请求成功的success回调,若请求本身出现网络错误、服务端返回404/500状态码,不会进入success回调,逻辑自然不会执行,需添加error回调捕获异常:error: function(xhr, status, error){ console.log('请求异常', status, error); // 可添加自定义异常处理逻辑 }调试阶段可在handleResult第一行添加
console.log(data),在浏览器控制台查看实际返回的内容,快速定位判断失败原因。问题4:点击事件未完成就跳转
若#clearcart的点击事件绑定了异步逻辑,会出现跳转执行时点击逻辑还未完成的情况,可将跳转逻辑移入点击事件的回调末尾,避免逻辑丢失。
修复后完整代码示例
AJAX请求部分:
$.ajax({ url: "addorderInfo.php", type: "POST", data: new FormData(this), contentType: false, cache: false, processData:false, dataType: 'text', success: handleResult, error: function(xhr, status, error){ console.log('请求异常', status, error); window.location.href ='404.php'; } });
回调处理部分:
function handleResult(data){ if(data.trim() == 'error'){ window.location.href ='404.php'; } else{ $( "#clearcart" ).click(); window.location.href = "ordercomplited.php"; } }
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

