首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在服务器端ASP JScript中使用mootools时出现Response.WriteBlock错误

在服务器端ASP JScript中使用mootools时出现Response.WriteBlock错误
EN

Stack Overflow用户
提问于 2010-11-04 20:03:55
回答 2查看 351关注 0票数 4

今天我一直在使用Mootools 1.3服务器端。它真的很好,让它变得经典的ASP友好,但仍然充满了好处(tm)。

在向朋友展示Mootools的功能时,我遇到了一个与ASP相关的奇怪错误,这是我以前从未见过的。

代码语言:javascript
运行
复制
Microsoft JScript runtime error '800a138f'

'Response.WriteBlock(...)' is null or not an object

导致它的代码是Mootools的一个时髦的"forEach“助手:

代码语言:javascript
运行
复制
[1,2,3].each( function( i ) {
   Response.Write( "<b>" + i + "</b>, " );
});

它真的一点也不喜欢这个代码。我注释掉了Response.Write,并且有一个空块,但它仍然抛出了错误。非常奇怪。我知道ASP做了一些优化魔术,将html块和asp块组合在一起(因此有了Reponse.WriteBlock注释),但不确定为什么这会适用于这里。

但是,下面的代码将会运行:

代码语言:javascript
运行
复制
var fruits = [];
fruits.push( "apples" );
fruits.push( "oranges" );

fruits.each( function( fruit ) {
  Response.Write( "<b>" + fruit + "</b>, " );
});

// As will this
var nums = [ 1,2,3,4,5 ];
nums.each( function(i) {
    Response.Write( "<b>" + i + "</b>" );
});

有没有人知道是什么原因导致了这个错误?我将继续挖掘,但不知道是否有任何JScript的同事可以提供一些启发。可能只是ASP的一种怪癖?

更新

Wierdness还在继续,设法让它正常工作,但这似乎取决于each循环之前发生的事情。因此,简单地说,这是不起作用的:

代码语言:javascript
运行
复制
<%

[ 1,2,3,4,5 ].each( function(i) {
    Response.Write( "<b>" + i + "</b>" );
});

%>

但是这样做了(注意上面添加了var行):

代码语言:javascript
运行
复制
<%

var something = 1;

[ 1,2,3,4,5 ].each( function(i) {
    Response.Write( "<b>" + i + "</b>" );
});

%>

确实很奇怪。一定与ASP处理块的方式有关,也许解析器中有一条关于块以(它会认为是相当随机的)数组语句开头的规则,或者至少它没有被编程来期望我这样做(我不认为他们很久以前就想到了服务器端mootools )!我仍然想要一个深入的解释,这样我就可以更好地避免它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-18 03:05:14

尝试将您的代码更改为此…

代码语言:javascript
运行
复制
<%

;[ 1,2,3,4,5 ].each( function(i) {
    Response.Write( "<b>" + i + "</b>" );
});

%>

这只是一个预感。

一般来说,使用([作为行或文件的开头而不使用分号被认为是不好的做法。主要原因与串联有关……

例如:

代码语言:javascript
运行
复制
//foo.js
1 + 1 == 2

//bar.js
("lol, string")

//foo.js + bar.js
1 + 1 == 2("lol, string") // TypeError: number is not a function

由于bar.js无法知道最终会在它之前包含哪些内容,因此它应该始终在(之前包含自己的;

代码语言:javascript
运行
复制
//bar.js
;("lol, string")

//foo.js + bar.js
1 + 1 == 2;("lol, string") // SUCCESS!!1!

我的预感是,ASP领域正在发生类似的怪事。

由于我们无法访问JScript的源代码或ASP框架本身,因此无法确定发生了什么。

票数 1
EN

Stack Overflow用户

发布于 2010-11-07 11:03:43

我从来没有在经典的asp中见过response.writeblock,

不是应该是response.write吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4096436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档