js的showModalDialog对字符串的限制

不知道,大家有没有遇到这样的奇葩问题,当时今天笔者很不幸,遇到这一奇葩的问题,就当使用window.showModalDialog("test.jsp",args,‘dialogHeight=100px;dialogWidth=250px;‘);进行数据传输,当args的数据大于4096个字符时,多出来的数据会被自动截掉,从而导致数据的完整性丢失.

Syntax

vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

Parameters

sURL Required. String that specifies the URL of the document to load and display.
vArguments Optional. Variant that specifies the arguments to use when displaying the document. Use this parameter to pass a value of any type, including an array of values. The dialog box can extract the values passed by the caller from the dialogArguments property
of the window object.

MSDN给出了如下标识:

The vArguments parameter can be referenced within
the modal dialog box using the dialogArguments property of the window object.
If the vArguments parameter is defined as a string, the maximum string length that can be passed to the modal dialog
box is 4096 characters; longer strings are truncated.

根据MSDN的说法,我们把args弄成object或array就行了,那么对于参数传出和传入的地方都需要修改"接口"的代码,这样一来未免就一些许麻烦。那么能不能让字符串参数突破args的4096个字符的限制呢?

其实对于一个字符串来说,只要我们把它包装成string
object,就可以不再args长度的限制了,而且在Modal Dialog中处理字符串的接口函数不需要做任何的修改,如下代码:

function test(id){
	var _bpc;
	jQuery.ajax({
		url: 'test.html',
		data: {'id': id, 'name': name},
		type : "POST",
		async: false,
		cache : false,
		dataType : "json",
		success : function(data) {
			var result = json_parse(unescape(data));
			var selectHTML = [];
			if(result){
				if(result.length == 1){
					_bpc = {'id': result[0][0], 'name': result[0][1]};
				} else if(result.length > 1){
					selectHTML .push('<select name="">');
					for(var i = 0, le = result.length; i < le; i++){
						var item = result[i];
						selectHTML.push('<option id="bpc' + item[0] + '" value="' + item[0] + '">' + item[1] + '</option>');
					}
					selectHTML.push('</select>');
					alert(selectHTML.length);
					_obj = window.showModalDialog('index.html?'+'Math.random().toString()',selectHTML, 'dialogHeight=100px;dialogWidth=250px;');
					if(!_obj)  _obj = {'id': -1, 'name': ''};
				}
			}
		},
		error: function(e){
			alert('查询失败,请稍后再试!');
		}
	});
	return _obj;
}

数据接收页面:

<script type="text/javascript" language="javascript">
function finish(){
	var sel = document.getElementById('selDiv').firstChild;
	if(sel){
		var selectedItem = sel.options[sel.selectedIndex];
		window.returnValue = {'id': selectedItem.value, 'name': selectedItem.text};
	}
	window.close();
}
window.onload =function(){
	var args = window.dialogArguments;
	if(args != null){
		var bpcsArgs = args.join('');
		document.getElementById("selDiv").innerHTML = bpcsArgs;
		document.getElementById("selDiv").firstChild.focus();
	}
}
</script>
</head>
<body style="text-align: center;background: #ECE9D8; margin: 5px auto;" onkeydown="if(event.keyCode==13)finish()">
	<table align="center">
		<tr align="left"><td>该档案存在于以下流水类型中</td></tr>
		<tr align="left"><td>请选择一个后点击确定</td></tr>
		<tr align="center"><td><div id="selDiv"></div></td></tr>
		<tr align="center"><td><input type="submit" value="确定" onclick="finish()" />
			    <input type="button" value="取消" onclick="window.close()" /></td></tr>
	</table>
</body>
</html>
时间: 2024-08-04 00:07:23

js的showModalDialog对字符串的限制的相关文章

js中showModalDialog的使用

基本介绍:          showModalDialog()         (IE 4+ 支持)          showModelessDialog()      (IE 5+ 支持)          window.showModalDialog()                  方法用来创建一个显示HTML内容的模态对话框.          window.showModelessDialog()             方法用来创建一个显示HTML内容的非模态对话框.使用方法

[转]JS中对象与字符串的互相转换

原文地址:http://www.cnblogs.com/luminji/p/3617160.html 在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: throw new SyntaxError('JSON.parse'); 查询资料,大概意思如下: JSON.parse方法在遇到不可解析的字符串时,会抛出SyntaxError异常. 即:JSON.parse(text, reviver),This method parses a JSON text t

js中把JSON字符串转换成JSON对象最好的方法

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用jQuery的each方法来遍历 用jQuery解析JSON数据的方法,作为jQuery异步请求的传输对象,jQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明. 这里首先

js window.showModalDialog

window showModalDialog 内容 (1)父页面打开窗口 (2)父页面向子页面传递参数 (3)子页面获取父页面传递的参数,并且返回一定的值. 代码: function getHQ1(option){ //父页面通过2种方式,向子页面传递参数 //1)直接在url中加参数与值.           如:/TBPWeb/technology/institutionManager/technologyTextarea.jsp?opt=2 //2)var obj = new Object

Js中常用的字符串,数组,函数扩展

由于最近辞职在家,自己的时间相对多一点.所以就根据prototytpeJS的API,结合自己正在看的司徒大神的<javascript框架设计>,整理了下Js中常用一些字符串,数组,函数扩展,一来可以练练手,二来也锻炼下自己的代码能力.由于代码里面的注释自认为已经非常详细,所以就直接贴代码了. 1. 字符串扩展: ;(function() { var method, stringExtends = { /** * 删除字符串开始和结尾的空白 * @returns {string} */ stri

项目--js中替换目标字符串指定的所有字符

js提供的字符串替换函数replace可以将字符串中符合条件的字符串替换成目标字符串.但是一般使用字符串进行查找替换只能替换第一个符合条件的结果.如var str = 大家都是男人吗,难道不是吗!;str = str.replace('吗', '嘛');alert(str);var str = 大家都是男人吗,难道不是吗!;str = str.replace('吗', '嘛');alert(str);上述代码中只有第一个吗被替换,输出结果是大家都是男人嘛,难道不是吗! ,嘿嘿如果想全部替换字符串

js定义多行字符串

js本身没有提供类似的定义方式,但是可以通过多行注释(/* */),已经借助function的方式来达到多行字符的定义,例如代码: var jstr = function() { var fun = function() { /*line1 line2 line3 line4*/ } var lines = new String(fun); return lines.substring(lines.indexOf("/*") + 3, lines.lastIndexOf("*

js便签笔记(8)——js加载XML字符串或文件

1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open("GET", "data.xml", false); xhr.send(null); var xmlDoc = xhr.responseXML; console.log(xmlDoc

JS中如何将字符串转化成日期 日期格式化方法

<!--     /**     * 对Date的扩展,将 Date 转化为指定格式的String     * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) 可以用 1-2 个占位符     * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)     * eg:     * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-0