日期:2014-05-16  浏览次数:20296 次

JavaScript数组,加上AJAX之后,竟然变了,我茫然了
一段简单的,JavaScript数组,记录一些东西,
var arrError = [];
arrError["a"]=1;
arrError["x"]=0;
.......


之前没有用AJAX,用循环遍历之后用字符串传递给后台,读取
  for (var o in arrError) {
  str += o + "," + (arrError[o] ? 1 : 0) + "|";
  }
这样写,是没有问题的,
将得到"a,1|x,0|"这样的字符串,后台解析。


但是,当加入AJAX后

AjaxPro.Utility.RegisterTypeForAjax(typeof(Page1));
这种ajax的代码我用了好久了,调用方法是没有错的。

但JavaScript端的,遍历数组,就出问题了。

  for (var o in arrError) {
  str += o + "," + (arrError[o] ? 1 : 0) + "|";
  }
这段代码得出的结果是
clear,1|addRange,1|然后才我原来想要的数组里的内容,调试的时候我设断点看,之前的数组没有那两个方法,现在调试,就有这两个方法了,怎么办?

------解决方案--------------------
http://www.pccode.net/info/2011/08/03/20110803-7165.html
AjaxPro客户端框架总结
由于微软构建asp.net 2.0时对ajax技术的不重视,在04、05年ajax风起云涌之时,在asp.net出现了AjaxPro这个Ajax框架,虽然随着asp.net ajax的发布,AjaxPro被强大的asp.net ajax的光芒覆盖,但AjaxPro的简单易用性方面还是非常不错的。

AjaxPro在客户端会输出三个Core.ashx、Converter.ashx和Prototype.ashx三个文件,其实就是javasript文件。其中Prototype.js对Object建立了extend,然后在extend上增加了Apply和Bin方法,之后的Ajax调用的核心文件Core.ashx就是基于extend上进行的。Prototype.js里对Array,String进行扩展并增加了2个事件方面的方法addEvent与removeEvent方法。

Array对象扩展:

view sourceprint?01 push: function(o) { 

02 this[this.length] = o; 

03 }, 

04 addRange: function(items) { 

05 if(items.length > 0) { 

06 for(var i=0; i<items.length; i++) { 

07 this.push(items); 

08 } 

09 } 

10 }, 

11 clear: function() { 

12 this.length = 0; 

13 return this; 

14 }, 

15 shift: function() { 

16 if(this.length == 0) { return null; } 

17 var o = this[0]; 

18 for(var i=0; i<this.length-1; i++) { 

19 this = this[i + 1]; 

20 } 

21 this.length--; 

22 return o; 

23 }

String对象的扩展:

view sourceprint?01 trimLeft: function() { 

02 return this.replace(/^\s*/,""); 

03 }, 

04 trimRight: function() { 

05 return this.replace(/\s*$/,""); 

06 }, 

07 trim: function() { 

08 return this.trimRight().trimLeft(); 

09 }, 

10 endsWith: function(s) { 

11 if(this.length == 0 || this.length < s.length) { return false; } 

12 return (this.substr(this.length - s.length) == s); 

13 }, 

14 startsWith: function(s) { 

15 if(this.length == 0 || this.length < s.length) { return false; } 

16 return (this.substr(0, s.length) == s); 

17 }, 

18 split: function(c) { 

19 var a = []; 

20 if(this.length == 0) return a; 

21 var p = 0; 

22 for(var i=0; i<this.length; i++) { 

23 if(this.charAt(i) == c) { 

24 a.push(this.substring(p, i)); 

25 p = ++i; 

26 } 

27 } 

28 a.push(s.substr(p)); 

29 return a; 

30 }

String对象还增加了2个静态方法:

view sourceprint?01 format: function(s) { 

02 for(