内存基本没有增
在运行到11次的时候,我进行了以下操作:跳转页面进行其他操作(比如添加新闻等操作),IISRESET,重新登陆,清除浏览器COOKIES,历史记录,临时文件等操作,然后回到拖动的界面,操作了1次(加上前面11次,累计也是12次)又是那样(大部分JS(除导航的按钮以外)全部失效)。
昏闷,都不知道是什么问题,无从下手解决!
莫非只有我一个人碰到这种问题??
在运行到11次的时候,我进行了以下操作:跳转页面进行其他操作(比如添加新闻等操作),IISRESET,重新登陆,清除浏览器COOKIES,历史记录,临时文件等操作,然后回到拖动的界面,操作了1次(加上前面11次,累计也是12次)又是那样(大部分JS(除导航的按钮以外)全部失效)。
昏闷,都不知道是什么问题,无从下手解决!
莫非只有我一个人碰到这种问题??
应该不是变量运行12次不符合要求,没有这个变量,我每次都是重新document.write的页面,而且是同一个页面TO zhucekunnan:
会不会是AJAX传递大量页面代码时,被浏览器(IE6)缓存了什么,然后溢出导致的错误?
1.因为在IE7中没有这个错误。
2.IE6完全关闭后才正常,其他操作(跳转页面进行其他操作(比如添加新闻等操作),IISRESET,重新登陆,清除浏览器COOKIES,历史记录,临时文件等操作),全部是准时12次JS就瘫痪。
3.当我去除了一个innerHTML=...后能坚持到13次,不过其他地方没有用到innerHTML=...的形式
4.当我不断的拖动新组件进来时,只能坚持6下,拖拽尺寸、拖动、编辑属性都只能坚持12下(为什么感觉这个问题有点像侦探问题)
我自己也测试测试(都弄了2天了),这个程序写的繁琐了些 我把AJAX的贴出来看看,有没有问题,怀疑是这段出了问题:var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;net.TextLoader = function(url,method,params,contentType,callBack)
{
this.url = url;
this.method = method;
this.params = params;
this.contentType = contentType;
this.callBack = callBack;
this.isAsync = typeof(this.callBack) == "function";
this.req = null;
this.onerror = this.defaultError;
}net.TextLoader.prototype=
{
loadTextDoc:function()
{
if (!this.method)
{
this.method = "POST";
}
if ((!this.contentType && this.method == "POST") || !this.contentType)
{
this.contentType = "application/x-www-form-urlencoded";
}
if (window.XMLHttpRequest)
{
this.req = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (this.req)
{
try
{
if (this.isAsync)
{
var loader = this;
this.req.onreadystatechange = function()
{
loader.onReadyState.call(loader);
}
}
this.req.open(this.method,this.url,this.isAsync);
if (this.contentType)
{
this.req.setRequestHeader("Content-Type",this.contentType);
}
this.req.send(this.params);
if(!this.isAsync)
{
var req = this.req;
if (req.readyState == net.READY_STATE_COMPLETE)
{
if (req.status == 200 || req.status == 0)
{
if(req.responseXML != null && req.responseXML.xml != null && req.responseXML.xml != '')
{
return req.responseXML;
}
else
{
return req.responseText;
}
this.url = null;
this.method = null;
this.params = null;
this.contentType = null;
this.callBack = null;
this.isAsync = null;
this.req = null;
this.onerror = null;
net = null;
CollectGarbage();
}
else
{
this.onerror.call(this);
}
}
}
}
catch(err)
{
this.onerror.call(this);
}
}
}, onReadyState:function()
{
var req = this.req;
var ready = req.readyState;
if (typeof(this.callBack) == "function")
{
this.callBack(ready);
}
if (ready == net.READY_STATE_COMPLETE)
{
var httpStatus = req.status;
if (httpStatus == 200 || httpStatus == 0)
{
if (typeof(this.callBack) == "function")
{
this.callBack(req.responseText);
}
}
else
{
this.onerror.call(this);
}
}
}, defaultError:function()
{
alert("error fetching data!" + "\n\n " + this.req.readyState);
}
}
再者,当你运行到比如说6次(任意的<14次)时,这个时候你进行“跳转页面进行其他操作,IISRESET,重新登陆,清除浏览器COOKIES,历史记录,临时文件等操作”,然后回到这个页面,这个问题依然是累计的,即你再点8次(14-6),仍旧出错。(除非你关闭IE6,然后次数恢复到14次)
还有,请测试的时候打开IE的所有脚本调试选项,是在“INTERNET选项”中的“高级”,你会发现IE6并没有报任何错误!而且打开任务管理器,也不存在CPU和内存有大的变化。
最后,我的项目已经定型了,再做修改很复杂,我每次document.write整个页面是不好改变的,不知道有没有高手指点一下解决这个问题,不胜感激!分4个文件:
test1.aspx 代码为:
<script language=javascript src=Ajax.js></script>
<script language=javascript src=abc.js></script>
<input type=button name=Button value=Button onclick="abc();">
abc.js 代码为:function abc()
{
var loader = new net.TextLoader("test2.aspx","POST",null,null,LoadingDo2);
loader.loadTextDoc();
}function LoadingDo2(txt)
{
if (typeof(txt) == "string")
{
document.write(txt);
alert("document能关闭");
document.close();
}
}test2.aspx 代码为:(请在Codebehind中增加以下代码)private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(@"<script language=javascript src=Ajax.js></script><script language=javascript src=abc.js></script><input type=button name=Button value=Button onclick=abc()>");
}
Ajax.js 代码为:(怀疑问题不在这段代码中)var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4; net.TextLoader = function(url,method,params,contentType,callBack)
{
this.url = url;
this.method = method;
this.params = params;
this.contentType = contentType;
this.callBack = callBack;
this.isAsync = typeof(this.callBack) == "function"; this.req = null;
this.onerror = this.defaultError;
} net.TextLoader.prototype=
{
loadTextDoc:function()
{
if (!this.method)
{
this.method = "POST";
}
if ((!this.contentType && this.method == "POST") ¦ ¦ !this.contentType)
{
this.contentType = "application/x-www-form-urlencoded";
}
if (window.XMLHttpRequest)
{
this.req = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (this.req)
{
try
{
if (this.isAsync)
{
var loader = this;
this.req.onreadystatechange = function()
{
loader.onReadyState.call(loader);
}
}
this.req.open(this.method,this.url,this.isAsync);
if (this.contentType)
{
this.req.setRequestHeader("Content-Type",this.contentType);
}
this.req.send(this.params); if(!this.isAsync)
{
var req = this.req;
if (req.readyState == net.READY_STATE_COMPLETE)
{
if (req.status == 200 ¦ ¦ req.status == 0)
{
if(req.responseXML != null && req.responseXML.xml != null && req.responseXML.xml != '')
{
return req.responseXML;
}
else
{
return req.responseText;
} this.url = null;
this.method = null;
this.params = null;
this.contentType = null;
this.callBack = null;
this.isAsync = null;
this.req = null;
this.onerror = null;
net = null; CollectGarbage(); }
else
{
this.onerror.call(this);
}
}
}
}
catch(err)
{
this.onerror.call(this);
}
}
}, onReadyState:function()
{
var req = this.req;
var ready = req.readyState;
if (typeof(this.callBack) == "function")
{
this.callBack(ready);
}
if (ready == net.READY_STATE_COMPLETE)
{
var httpStatus = req.status;
if (httpStatus == 200 ¦ ¦ httpStatus == 0)
{
if (typeof(this.callBack) == "function")
{
this.callBack(req.responseText);
} }
else
{
this.onerror.call(this);
}
}
}, defaultError:function()
{
alert("error fetching data!" + "\n\n " + this.req.readyState);
}
}
http://www.ch68.net/TestPleaseUseIE6.zip
http://www.ch68.net/TestPleaseUseIE6.zip
function LoadingDo2(txt)
{
if (typeof(txt) == "string")
{
document.close();
alert(document.readyState)
alert("write")
document.write("test");
//这后边的都不执行了,因为被Write掉了
document.write("test");
alert("close")
document.close();
}
}
ParameterssText Required. String that specifies the text and HTML tags to write. Return ValueNo return value.ResYou should not use the write or writeln methods on the current document after the document has finished loading unless you first call the open method, which clears the current document's window and erases all variables.
Note When document.write or document.writeln is used in an event handler, document.close should also be used.
As of Internet Explorer 6, the _media value of the sName parameter specifies that this method loads a URL in the Media Bar. SyntaxoNewDoc = document.open(sUrl [, sName] [, sFeatures] [, bReplace])
ParameterssUrl Required. When opening a new document, sUrl is a String that specifies a Multipurpose Internet Mail Extensions (MIME) type for the document. When opening a new window, sUrl is a String that specifies the URL to render in the new window. If a sUrl is not specified, a new window with about:blank is displayed.text/html Default. Currently the only MIME type supported for this method.
sName Optional. When opening up a new document, specifying the String replace for sName designates that the new document is to replace the current document in the history list. If the value replace is not specified when opening up a document, a new entry will simply be added to the history list. When opening a window, this is a String that specifies the name of the window. The value of this parameter may be specified as the value of the TARGET attribute for a form or a element. This value will then will define this new window as the place to load a document. replace This value is only used for opening up a new document and specifies that the new document is to replace the current entry in the history list.
_blank When opening a window, the sUrl is loaded into a new, unnamed window.
_parent When opening a new window, the sUrl is loaded into the current frame's parent. If the frame has no parent, this value acts as the value _self.
_search Available in Internet Explorer 5 and later. When opening a window, the sUrl is opened in the browser's search pane.
_self When opening a window, the current document is replaced with the specified sUrl .
_top sUrl replaces any framesets that may be loaded. If there are no framesets defined, this value acts as the value _self.
_media Available in Internet Explorer 6 and later. The sUrl is loaded in the Media Bar.
sFeatures Optional. This String is only used when opening a new window and specifies the settings of the window's display features. This parameter is a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following features are supported.channelmode = { yes | no | 1 | 0 } Specifies whether to display the window in theater mode and show the channel band. The default is no.
directories = { yes | no | 1 | 0 } Specifies whether to add directory buttons. The default is yes.
fullscreen = { yes | no | 1 | 0 } Specifies whether to display the browser in full-screen mode. The default is no. Use full-screen mode carefully. Because this mode hides the browser's title bar and menus, you should always provide a button or other visual clue to help the user close the window. ALT+F4 closes the new window. A window in full-screen mode must also be in theater mode (channelmode).
height = number Specifies the height of the window, in pixels. The minimum value is 100.
left = number Specifies the left position, in pixels. This value is relative to the upper-left corner of the screen. The value must be greater than or equal to 0.
location = { yes | no | 1 | 0 } Specifies whether to display the input field for entering URLs directly into the browser. The default is yes.
menubar = { yes | no | 1 | 0 } Specifies whether to display the menu bar. The default is yes.
resizable = { yes | no | 1 | 0 } Specifies whether to display resize handles at the corners of the window. The default is yes.
scrollbars = { yes | no | 1 | 0 } Specifies whether to display horizontal and vertical scroll bars. The default is yes.
status = { yes | no | 1 | 0 } Specifies whether to add a status bar at the bottom of the window. The default is yes.
titlebar = { yes | no | 1 | 0 } Specifies whether to display a title bar for the window. This parameter is ignored unless the calling application is an HTML Application or a trusted dialog box. The default is yes.
toolbar = { yes | no | 1 | 0 } Specifies whether to display the browser toolbar, making buttons such as Back, Forward, and Stop available. The default is yes.
top = number Specifies the top position, in pixels. This value is relative to the upper-left corner of the screen. The value must be greater than or equal to 0.
width = number Sets the width of the window, in pixels. The minimum value is 100.
bReplace Optional. When the sUrl is loaded into the same window, this Boolean parameter specifies whether the sUrl creates a new entry or replaces the current entry in the window's history list. true sUrl replaces the current document in the history list
false sUrl creates a new entry in the history list.
Return ValueReturns a reference to the new document or window object. Use this reference to access properties and methods of the new document or window.ResWhen a function fired by an event on any object calls the open method, the window.open method is implied.
<SCRIPT LANGUAGE="JScript">
function foo() {
open('about:blank');}
</SCRIPT>
<BODY onclick="foo();">
Click this page and window.open() is called.
</BODY>When an event on any object calls the open method, the document.open method is implied. <BUTTON onclick="open('Sample.htm');">
Click this button and document.open() is called.
</BUTTON>ExampleThe following example shows how to use the open method to replace the current document with a new document and display the HTML up contained in the variable sMarkup. Hide Example<HTML>
<HEAD>
<TITLE>First Document</TITLE>
<script>
function replace(){
var oNewDoc = document.open("text/html", "replace");
var sMarkup = "<HTML><HEAD><TITLE>New Document</TITLE><BODY>Hello, world</BODY></HTML>";
oNewDoc.write(sMarkup);
oNewDoc.close();
}
</script>
</HEAD>
<BODY>
<h1>I just want to say</h1><br>
<!--Button will call the replace function and replace the current page with a new one-->
<Input type ="button" value = "Finish Sentence" onclick="replace();">
</BODY>
</html>
function abc()
{
var loader = new net.TextLoader("GetPageCode.aspx","POST",null,null,"");
//callback不是函数的时候,ajax.js会进行同步操作(异步执行的时候,你并不处于event handler之中)
var str=loader.loadTextDoc();
var doc = document.open("text/html", "replace");
doc.write(str);
doc.close();
}点了40多下button,木有出现问题
AJAX的这种用法我是压根不知道的也无从找到还是懂英文好啊!羡慕!
以后有问题再问你,呵呵~~~
再次非常感谢,帮了我很大很大一个忙!
{
var loader = new net.TextLoader("GetPageCode.aspx","POST",null,null,LoadingDo2);
loader.loadTextDoc();
}function LoadingDo2(txt)
{
if (typeof(txt) == "string")
{
setTimeout(function() {
var doc = document.open("text/html", "replace");
doc.write(txt);
doc.close();
}, 0);
}
}