dojo.io.iframe VS dojo.request.iframe VS dojo form(Explorer Save As Prompt)

来源:互联网 发布:公众号 回复 php 代码 编辑:程序博客网 时间:2024/06/06 01:05

本文对比了 dojo.io.iframe 和 dojo.request.iframe 实现相同功能的用法,同时还给出了使用一般form来实现同样功能的代码。dojo.io.iframe的代码出自:fun with dojo.io.iframe这篇博文,该博文介绍了使用dfd解决脚本加载后iframe不能多次执行send请求的问题,比设置timeout更合理。dojo.request.iframe 和 dojo form的代码出自我的博文:Dojo导出Chart到PDF文件,如果想了解本文三段代码使用的情景,可以查看该博文。使用dojo 1.8发行版时,如果使用第二段dojo.request.iframe代码有问题,可以到Dojo SVN站点下载最新的iframe文件替换掉旧的iframe文件,dojo.request.iframe就可以正常工作了。

dojo.io.iframe:

// dfd used for save the return value of iframe.sendvar dfd;var sendSVGToServer = function (svg, title) {// sanitize svg, if doesn't santize svg before post, cannot work in Chromesvg = svg.replace(/ /g, ' ');// create a form with method postvar form = document.createElement('form');dojo.attr(form, 'name', 'svg_submit_form');dojo.attr(form, 'method', 'post');dojo.attr(form, 'multipart/form-data');document.body.appendChild(form);// create my postdatavar content = {/* set a bunch of parameters here that  will be posted to the http handler */svg: svg,filename: title || 'chart'};//  Deferred object returned by iframe.send and call cancel on it before trying to send another requestif (dfd) {dfd.cancel();}// make the requestdfd = dojo.io.iframe.send({url: 'export.php',form: form,content: content,error: function(response, ioArgs) {if (response.message === 'Deferred Cancelled') {return response;} else {console.error(response);}}});// get rid of the form created abovedocument.body.removeChild(form);}


dojo.request.iframe:

var sendSVGToServer = function (svg, title) {// sanitize svg, if doesn't santize svg before post, cannot work in Chromesvg = svg.replace(/ /g, ' ');// Cancel last iframe post requestif (dfd) {dfd.cancel();}dfd = iframe.post('export.php', {preventCache: true,data: {svg: svg,filename: title || 'chart'}}).then(function(response) {console.log('iframe get response');},function(error) {if (error.message === 'Request canceled') {// console.log('Last iframe post request is canceled');return error;} else {console.error('sendSVGToServer()->iframe.post(): ' + error);}});};

dojo form:

var sendSVGToServer2 = function(svg, title) {// sanitize svg, if doesn't santize svg before post, cannot work in Chromesvg = svg.replace(/ /g, ' ');var formNode = domConstruct.create('form', {name: 'svg_submit_form',method: 'post',action: 'export.php',enctype: 'multipart/form-data'}, win.body());domStyle.set(formNode, 'display', 'none');var createInput = function(name, value){domConstruct.create('input', {type: 'hidden',name: name,value: value}, formNode);};createInput('svg', svg);createInput('filename', title || 'chart');formNode.submit();domConstruct.destroy(formNode);}