Array类型对象从ifram传到主页面,类型丢失
2010-07-09 19:35
155 查看
今天在把一个Array对象系列化成json对象时,最终的结果老是不对,跟下去,发现jsonhelper(
转化js对象为json字符串的帮助类)中有判断是否是Array的语句if(o instanceof Array)。而定义
的对象的这个属性,明明是Array,直接鼠标移上去查看,外观都符合Array的表现(vs2008)。疑惑
啊。补充一下,这里流程是这样的:iframe对应的页面实现一个getValue方法获取这个页面中的值,
主页面通过iframe.getValue()拿到js对象。然后,主页面把js对象转成json字符串。耐心的跟,发
现在getValue里面obj instanceof Array 还是true的,然后到了主页面后,obj instanceof Array
就成false,obj只是Object类型。难倒,Array对象,到了另个页面,类型就丢失,变成了基本的
Object?于是另建个测试web。关键代码如下
Main.aspx:
<head runat="server">
<title></title>
<script type="text/javascript" src="public.js">
</script>
<script type="text/javascript">
function showType() {
var val = frm1.getValue();
frm1.document.writeln("iframe frm1' return value should be Arrary
type,length is" + val.length + "<br/");
frm1.document.writeln("show each item:<br/>");
frm1.document.writeln("<ol>");
for (var i = 0; i < val.length; i++) {
frm1.document.writeln("<li>" + val[i] + "</li>");
}
frm1.document.writeln("</ol>");
frm1.document.writeln("<br/>");
frm1.document.writeln("let us see it's type whether is Array use val
instance of Array: ");
frm1.document.writeln(val instanceof Array);
frm1.document.writeln("<br/>");
var loaclArrObj = new Array();
frm1.document.writeln("let us see local Array type object use loaclArrObj
instance of Array: ");
frm1.document.writeln(loaclArrObj instanceof Array);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<iframe src="Default2.aspx" id="frm1" width="500px" height="400px"></iframe>
</div>
<div>
<input type="button" value="getType" onclick="showType()" /></div>
</form>
</body>
</html>
iframe.aspx:
<head runat="server">
<title></title>
<script type="text/javascript">
function getValue() {
var arr = new Array();
arr.push("hell world");
arr.push("how are you");
arr.push("i'm fine! thank you!");
return arr;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
英文很菜,刻意的逼自己锻炼,所以没用中文。
结果:
iframe frm1' return value should be Arrary type,length is3
hell world
how are you
i'm fine! thank you!
let us see it's type whether is Array use val instance of Array: false
let us see local Array type object use loaclArrObj instance of Array: true
除了访问Array对象的类型有失真外,其他一切正常。而本页面定义的Array对象,百分百保真。
然后在chrome,firefox下运行,同样的结果。
这里。描述的都是现象,不知道怎么去更深一步去描叙。比如js作用域,跨域?可惜搜搜,查到的域都不足以匹配这里的域的意思。找不到解释,很是惶恐,盼‘真心人’出来释疑解惑。
今天在把一个Array对象系列化成json对象时,最终的结果老是不对,跟下去,
发现jsonhelper(转化js对象为json字符串的帮助类)中有判断是否是Array的语
句if(o instanceof Array)。而定义的对象的这个属性,明明是Array,直接鼠标移上去查看,
外观都符合Array的表现(vs2008)。疑惑啊。补充一下,这里流程是这样的:iframe对应的页面实现一个
getValue方法获取这个页面中的值,主页面通过iframe.getValue()拿到js对象。然后,主页面把js对象转成json字符串。
耐心的跟,发现在getValue里面obj instanceof Array 还是true的,然后到了主页面后,obj instanceof Array
就成false,obj只是Object类型。难倒,Array对象,到了另个页面,类型就丢失,变成了基本的
Object。于是另建个测试web。关键代码如下 :
Main.aspx:
<head runat="server">
<title></title>
<script type="text/javascript" src="public.js">
</script>
<script type="text/javascript">
function showType() {
var val = frm1.getValue();
frm1.document.writeln("iframe frm1' return value should be Arrary type,length is" + val.length + "<br/");
frm1.document.writeln("show each item:<br/>");
frm1.document.writeln("<ol>");
for (var i = 0; i < val.length; i++) {
frm1.document.writeln("<li>" + val[i] + "</li>");
}
frm1.document.writeln("</ol>");
frm1.document.writeln("<br/>");
frm1.document.writeln("let us see it's type whether is Array use val instance of Array: ");
frm1.document.writeln(val instanceof Array);
frm1.document.writeln("<br/>");
var loaclArrObj = new Array();
frm1.document.writeln("let us see local Array type object use loaclArrObj instance of Array: ");
frm1.document.writeln(loaclArrObj instanceof Array);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<iframe src="Default2.aspx" id="frm1" width="500px" height="400px"></iframe>
</div>
<div>
<input type="button" value="getType" onclick="showType()" /></div>
</form>
</body>
</html>
iframe.aspx:
<head runat="server">
<title></title>
<script type="text/javascript">
function getValue() {
var arr = new Array();
arr.push("hello world");
arr.push("how are you");
arr.push("i'm fine! thank you!");
return arr;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
英文很菜,刻意的逼自己锻炼,所以没用中文。 结果:
iframe frm1' return value should be Arrary type,length is3
hell world
how are you
i'm fine! thank you!
let us see it's type whether is Array use val instance of Array: false
let us see local Array type object use loaclArrObj instance of Array:true
除了访问Array对象的类型有失真外,其他一切正常。而本页面定义的Array对象,百分百保真。然后在chrome,firefox下运行,同样的结果。这里。描述的都是现象,不知道怎么去更深一步去描叙。比如js作用域,跨域?可惜搜搜,查到的域都不足以匹配这里的域的意思。找不到解释,很是惶恐,盼‘真心人’出来释疑解惑。
如今时间到了20110724,在javascript精粹中看到同样的讨论以及解决办法。一下来自Arrya和对象容易混淆这个章节:
转化js对象为json字符串的帮助类)中有判断是否是Array的语句if(o instanceof Array)。而定义
的对象的这个属性,明明是Array,直接鼠标移上去查看,外观都符合Array的表现(vs2008)。疑惑
啊。补充一下,这里流程是这样的:iframe对应的页面实现一个getValue方法获取这个页面中的值,
主页面通过iframe.getValue()拿到js对象。然后,主页面把js对象转成json字符串。耐心的跟,发
现在getValue里面obj instanceof Array 还是true的,然后到了主页面后,obj instanceof Array
就成false,obj只是Object类型。难倒,Array对象,到了另个页面,类型就丢失,变成了基本的
Object?于是另建个测试web。关键代码如下
Main.aspx:
<head runat="server">
<title></title>
<script type="text/javascript" src="public.js">
</script>
<script type="text/javascript">
function showType() {
var val = frm1.getValue();
frm1.document.writeln("iframe frm1' return value should be Arrary
type,length is" + val.length + "<br/");
frm1.document.writeln("show each item:<br/>");
frm1.document.writeln("<ol>");
for (var i = 0; i < val.length; i++) {
frm1.document.writeln("<li>" + val[i] + "</li>");
}
frm1.document.writeln("</ol>");
frm1.document.writeln("<br/>");
frm1.document.writeln("let us see it's type whether is Array use val
instance of Array: ");
frm1.document.writeln(val instanceof Array);
frm1.document.writeln("<br/>");
var loaclArrObj = new Array();
frm1.document.writeln("let us see local Array type object use loaclArrObj
instance of Array: ");
frm1.document.writeln(loaclArrObj instanceof Array);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<iframe src="Default2.aspx" id="frm1" width="500px" height="400px"></iframe>
</div>
<div>
<input type="button" value="getType" onclick="showType()" /></div>
</form>
</body>
</html>
iframe.aspx:
<head runat="server">
<title></title>
<script type="text/javascript">
function getValue() {
var arr = new Array();
arr.push("hell world");
arr.push("how are you");
arr.push("i'm fine! thank you!");
return arr;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
英文很菜,刻意的逼自己锻炼,所以没用中文。
结果:
iframe frm1' return value should be Arrary type,length is3
hell world
how are you
i'm fine! thank you!
let us see it's type whether is Array use val instance of Array: false
let us see local Array type object use loaclArrObj instance of Array: true
除了访问Array对象的类型有失真外,其他一切正常。而本页面定义的Array对象,百分百保真。
然后在chrome,firefox下运行,同样的结果。
这里。描述的都是现象,不知道怎么去更深一步去描叙。比如js作用域,跨域?可惜搜搜,查到的域都不足以匹配这里的域的意思。找不到解释,很是惶恐,盼‘真心人’出来释疑解惑。
今天在把一个Array对象系列化成json对象时,最终的结果老是不对,跟下去,
发现jsonhelper(转化js对象为json字符串的帮助类)中有判断是否是Array的语
句if(o instanceof Array)。而定义的对象的这个属性,明明是Array,直接鼠标移上去查看,
外观都符合Array的表现(vs2008)。疑惑啊。补充一下,这里流程是这样的:iframe对应的页面实现一个
getValue方法获取这个页面中的值,主页面通过iframe.getValue()拿到js对象。然后,主页面把js对象转成json字符串。
耐心的跟,发现在getValue里面obj instanceof Array 还是true的,然后到了主页面后,obj instanceof Array
就成false,obj只是Object类型。难倒,Array对象,到了另个页面,类型就丢失,变成了基本的
Object。于是另建个测试web。关键代码如下 :
Main.aspx:
<head runat="server">
<title></title>
<script type="text/javascript" src="public.js">
</script>
<script type="text/javascript">
function showType() {
var val = frm1.getValue();
frm1.document.writeln("iframe frm1' return value should be Arrary type,length is" + val.length + "<br/");
frm1.document.writeln("show each item:<br/>");
frm1.document.writeln("<ol>");
for (var i = 0; i < val.length; i++) {
frm1.document.writeln("<li>" + val[i] + "</li>");
}
frm1.document.writeln("</ol>");
frm1.document.writeln("<br/>");
frm1.document.writeln("let us see it's type whether is Array use val instance of Array: ");
frm1.document.writeln(val instanceof Array);
frm1.document.writeln("<br/>");
var loaclArrObj = new Array();
frm1.document.writeln("let us see local Array type object use loaclArrObj instance of Array: ");
frm1.document.writeln(loaclArrObj instanceof Array);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<iframe src="Default2.aspx" id="frm1" width="500px" height="400px"></iframe>
</div>
<div>
<input type="button" value="getType" onclick="showType()" /></div>
</form>
</body>
</html>
iframe.aspx:
<head runat="server">
<title></title>
<script type="text/javascript">
function getValue() {
var arr = new Array();
arr.push("hello world");
arr.push("how are you");
arr.push("i'm fine! thank you!");
return arr;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
英文很菜,刻意的逼自己锻炼,所以没用中文。 结果:
iframe frm1' return value should be Arrary type,length is3
hell world
how are you
i'm fine! thank you!
let us see it's type whether is Array use val instance of Array: false
let us see local Array type object use loaclArrObj instance of Array:true
除了访问Array对象的类型有失真外,其他一切正常。而本页面定义的Array对象,百分百保真。然后在chrome,firefox下运行,同样的结果。这里。描述的都是现象,不知道怎么去更深一步去描叙。比如js作用域,跨域?可惜搜搜,查到的域都不足以匹配这里的域的意思。找不到解释,很是惶恐,盼‘真心人’出来释疑解惑。
如今时间到了20110724,在javascript精粹中看到同样的讨论以及解决办法。一下来自Arrya和对象容易混淆这个章节:
相关文章推荐
- spring mvc管理control时不能把从jsp页面收集过来的字符串类型的日期与对象中的日期对象相对应
- 格式化后台传到页面的JSON中的日期对象
- 把java中的list对象转换成net.sf.JSONArray类型对象
- 将后台数据(C#)转换成JSON字符串传到页面转换成json对象存储在JS中
- Struts2学习笔记(二)之页面与后台对象的类型转换
- spring 从jsp页面传array数组到后台,自动转化为java的数组类型
- Java基础---Java---IO流-----对象的序列化、管道流、RandomAccessFile、数据类型的流对象DataStream、ByteArrayStream
- JAVA判断一个Object对象是否为Array类型
- Javascript 的 Array 类型方法丢失!
- js中判断Object、Array、Function等引用类型对象是否相等
- Springmvc controller和jsp页面传值对象类型问题和普通问题
- Struts2学习笔记(二)之页面与后台对象的类型转换
- ###struts模型驱动(必须new)能够封装【对象类型属性的属性】.页面传参错误导致的问题:HTTP Status 500 - could not execute statement;
- js中判断Object、Array、Function等引用类型对象是否相等
- 关于java中long类型的数据转换json传到前台时丢失精度问题的解决办法
- Springmvc controller和jsp页面传值对象类型问题和普通问题
- 如何判断CFArray中对象的类类型
- Java基础---Java---IO流-----对象的序列化、管道流、RandomAccessFile、数据类型的流对象DataStream、ByteArrayStream
- 对象中某属性在数据库中是Date类型 页面显示格式转换
- jsp页面0以Integer类型传到后台的坑 mybatis 框架时 ,别的不知道