使用Form Iframe Request取代Ajax技术和Jquery的Ajax方法技术
有个好的想法,如果所有的网站都不使用 Ajax 技术,或者不再为了使用比较成熟的 Ajax 方法而去加载 JQuery。写这篇文章不是说用 Ajax 不好,而是从另外一方面去想,如果我们把东西做的足够简单,或者在特殊情况下可以不使用 Ajax 技术来达到和 Ajax 一样的用户体验。其实,是可以实现的,那就是使用 Iframe。
之前看过一篇文章,有人说过 Google 的天才们发明了 HtmlFile 的一个东西,当时不知所云。后来在一个偶然的机会,需要去修改 QiboCms 系统,才发现里面的评论一处使用 Iframe 来作为局部刷新了,当时也是蛮佩服当时的作者的,这样的兼容性应该更好。如果一个程序员在 GB2312 编码的程序和网页上使用 Jquery 的 Ajax 功能,你会发现,你做不到,非常麻烦,要不是页面乱码就是服务器参数接收乱码,总之非常麻烦,Ajax 的 Header 里面添加编码信息也依然不能解决。也许在当时浏览器技术还不是很成熟的年代,这样的方法才是最完美的了。
要实现这样的功能,需要工程师必须了解 HTML 的 Form 表单是可以提交给同域名页面的 Iframe 的,但是由于当今的教材很少有提到过这点的,并且在一般的项目中非常不常见,所以一般的技术是不知道的。有个这样的设想后,在做项目的时候抽时间写了一个小小的函数示例,发现还蛮稳定的。
将代码分享如下:
function form_iframe_get(action, callback){ var time = new Date().getTime() ,c_iframe = document.createElement('iframe') ,c_form = document.createElement('form'); c_iframe.className = 'hidden'; c_iframe.name = 'request_iframe_'+time; c_form.className = 'hidden'; c_form.id = 'request_form_'+time; c_form.method='get'; c_form.target=c_iframe.name; c_form.action=action; document.body.appendChild(c_iframe); document.body.appendChild(c_form); c_form.submit(); var loadedDo = function(){ callback(c_iframe.contentWindow.document.body.innerHTML); c_form.parentNode.removeChild(c_form); c_iframe.parentNode.removeChild(c_iframe); }; if(c_iframe.attachEvent){ c_iframe.attachEvent("onload", function(){ loadedDo(); }); } else { c_iframe.onload = function(){ loadedDo(); }; } }
调用示例参考:
form_iframe_get('<?php echo WEB_APP_PATH?>admin/archives/list', function(rs){ document.getElementById('result').innerHTML = rs; });
暂无