Применение функции eval.

 
0
 
JavaScript
ava
kimoog | 09.08.2007, 16:56
Всем привет !
С явой не дружу, поэтому попросил знакомого помочь в написании кода. Тот сделал быстро. Я проверил, скрипт работает, но лишь в Opere и в Firefox. Самое интерестное что в IE выдает системную ошибку. Связи со знакомым пока нет.
Скрипт разработан для поиска по таблице в базе MySQL и вывода моментального результата без перезагрузки вэб странички. Кусок кода прилагаю:

Finder.prototype.SearchByKeyword = function(keyword) {
if (keyword == '' || keyword == undefined) {
return;
}
keyword = keyword.replace(/\"/g, '\\"');
this.url = 'finder/bdblog/?category=-1&text='+keyword+'';
subrequestfunc = function(parent) {
if (this.typeid == 'metrostat') {
where = 'metro';
}
if (this.typeid == 'roads') {
where = 'buildings';
}
what = this.obj_cod;
control.Finder.SelectBy(this.id, where, what, parent, this);
}
replyfunc = function () {
var search_objects=[];
eval(control.Finder.request.responseText);
if (search_objects && search_objects[0] && search_objects[0].params && search_objects[0].params.error != undefined) {
keyword = keyword.replace(/\\"/g, '"');
control.rWindow.Generate('', '<font color="#FF0000" face="Arial"><B>Ничего не найдено по запросу:&nbsp;</font>'+keyword+'</B>');
control.rWindow.Show(true);
} else {
control.SearchResults.ClearSubResults();
control.SearchResults.Clear(true);
for(i in search_objects) {
search_objects[i].params.subrequest = subrequestfunc;
control.SearchResults.AddObject(search_objects[i].params);
}
control.SearchResults.Show(true);
}
};
document.getElementById('searchbutton').src = 'i/progress.gif';
this.MakeRequest(function () {replyfunc() });

}

Строка ошибки указывает на функцию: eval(control.Finder.request.responseText);
Прошу помощи: SOS smile
Буду очень благодарен на любую подсказку.
Comments (8)
ava
AKS | 09.08.2007, 16:41 #
kimoog, попробуйте вместо eval использовать window.execScript (только для IE, есст.) с тем же аргументом...
ava
kimoog | 09.08.2007, 18:00 #
Цитата (AKS @ 9.8.2007, 16:41 findReferencedText)
kimoog, попробуйте вместо eval использовать window.execScript (только для IE, есст.) с тем же аргументом...

После изменений, в опере и лисе поиск перестал работать, делаю запрос и висит форма.
ava
AKS | 09.08.2007, 18:22 #
Цитата (kimoog @ 9.8.2007, 18:00 findReferencedText)
После изменений, в опере и лисе поиск перестал работать...

Так ведь изменения только для IE (ведь предупредил!), а для остальных надо оставить так, как было. Типа так:

if (window.execScript) {
window.execScript(control.Finder.request.responseText, 'jscript');
} else {
eval(control.Finder.request.responseText);
};
ava
kimoog | 10.08.2007, 15:00 #
Цитата (AKS @ 9.8.2007, 18:22)


if (window.execScript) {
  window.execScript(control.Finder.request.responseText, 'jscript');

} else {
  eval(control.Finder.request.responseText);

};


т.е. этот код вставить под

...
replyfunc = function () {
var search_objects=[];

правильно я понял ?
ava
Exception | 10.08.2007, 18:45 #
Да. А вообще, неплохо бы нам показать текст ошибки и этот самый responseText, который у него не получается выполнить.
P.S. Использовать тег font это дурной тон по отношению к пользователю и его браузеру.
ava
kimoog | 10.08.2007, 19:45 #
Менял строку, в IE все равно неработает. Подозреваю уже что тут дело не в eval.
А текст ошибки такой:
Цитата


Ошибка сценария IE,строка 1996,символ 3,Системная ошибка:-1072896658,Код:0,Url: ссылка на форму.

В строке 1996 находится:

eval(control.Finder.request.responseText);

Ошибка выводится только в IE. В лисе и опере скрипт работает на ура.

Вот что понимает js-код и прекрасно выводит Opera и Firefox.


search_objects.push(new SimpleObject({
id: '11',
typeid: 'busines',
typename: 'Каталог'
}));
ava
Exception | 10.08.2007, 22:46 #
Аналогичная проблема. Выяснилось, что по ошибке разработчики серверной части указали кодировку не "utf-8", а "UTF8" (кстати, я помню, однажды я допустил такую же ошибку). Все браузеры это "проглатывали", но в библиотеке MSXML это вызывает критическую ошибку при попытке доступа к responseText.
Проверь, какую кодировку возвращает твой скрипт.
ava
kimoog | 15.08.2007, 19:52 #
Цитата (Exception @ 10.8.2007, 22:46)
Проверь, какую кодировку возвращает твой скрипт.

Ох шайтан, шайтан. Действительно на сервере лежал файлик .htaccess с
 AddDefaultCharset cp1251 
.
Теперь ясно в чем проблема, которая совсем не относится к eval. Ну да ладно. Впредь буду сначала изучать кода ошибок, а потом уж беспокоить.
Твой +
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Exception   AKS   kimoog
advanced
Submit