前言:
在正常的AJAX的调用中其回调函数都是可控的数据格式json或者直接就是字符串。
场景:
笔者当前就遇到一个特殊的情况,场景如下:
公司对特殊字符有要求,需要防止Xss攻击,在测试环境中均由项目自行处理,如此ajax中的success与error均可控,如此在前台交互告知用户存在特殊字符。
而在正式的生产环境中,公司的防火墙也做了特殊字符处理,而且在捕获特殊字符时,会直接跳转到错误页面。
这样就产生了一个问题:在ajax中,如果传入的参数中包含了特殊字符,那么返回data数据,就会是那个防火墙跳转的错误页面。此时在ajax中就需要做特殊处理。
由于考虑到参数传入后的结果处理方式有两种直接跳转到新的URL和Ajax处理,而在跳转新的URL的逻辑中,防火墙的此种处理方式,可以很好的衔接而不会太大的降低用户体验。
那么如上的场景中,在AJAX中的处理,就需要考虑到,当返回的是新页面时,如何才能将这个返回的页面作为新页面或者替换当前页面的内容展示给用户呢?
处理方法:
如下为处理方式:
error : function(data) {
if (data.responseText.indexOf("DOCTYPE")>=0) {
$(document).find("html").html(data.responseText); //$.MsgBox.Alert("温馨提示","您的操作有可能对网站造成安全威胁,已被拦截"); return false; } }