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

本文对比了 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.send
var dfd;

var sendSVGToServer = function (svg, title) {

	// sanitize svg, if doesn't santize svg before post, cannot work in Chrome
	svg = svg.replace(/ /g, ' ');

	// create a form with method post
	var 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 postdata
	var 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 request
	if (dfd) {
		dfd.cancel();
	}

	// make the request
	dfd = 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 above
	document.body.removeChild(form);
}


dojo.request.iframe:

var sendSVGToServer = function (svg, title) {

	// sanitize svg, if doesn't santize svg before post, cannot work in Chrome
	svg = svg.replace(/ /g, ' ');
	
	// Cancel last iframe post request
	if (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 Chrome
	svg = 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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值