Сегодня я поигрался с Mootools 1.3 на стороне сервера.Его действительно приятно потратить на то, чтобы сделать его классическим ASP дружественным, но все еще полным добра (tm).
Показывая другу, на что способен Mootools, я натолкнулся на странную ошибку, связанную с ASP, которую я раньше не видел.
Microsoft JScript runtime error '800a138f'
'Response.WriteBlock(...)' is null or not an object
Код, который вызвал его, является одним из фантичных помощников Mootools «forEach»:
[1,2,3].each( function( i ) {
Response.Write( "<b>" + i + "</b>, " );
});
Он действительно не любит этот код вообще.Я закомментировал Response.Write и имел пустой блок, и он все еще выдавал ошибку.Очень странно.Я знаю, что ASP выполняет некоторую магию оптимизации для группировки блоков html и блоков asp (отсюда и комментарий Reponse.WriteBlock), но не уверен, почему это применимо здесь.
Однако этот код будет выполняться:
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?
[Обновление]
Странность продолжается, ей удалось заставить ее работать, но, похоже, она зависит от того, что предшествует каждому циклу.Итак, резюмируем, что это НЕ работает:
<%
[ 1,2,3,4,5 ].each( function(i) {
Response.Write( "<b>" + i + "</b>" );
});
%>
Но это работает (обратите внимание только на добавление над ним строки var):
<%
var something = 1;
[ 1,2,3,4,5 ].each( function(i) {
Response.Write( "<b>" + i + "</b>" );
});
%>
Очень странно.Должно быть что-то, что связано с тем, как ASP обрабатывает блоки, может быть, в парсере есть правило о блоках, начинающемся с (что будет выглядеть довольно случайным) оператора массива, или, по крайней мере, оно не должно быть запрограммировано на то, чтобы я это делалэто (я не думаю, что они представляли серверные mootools, когда)!Хотелось бы получить подробное объяснение, чтобы я мог лучше его избежать.