Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Применение функции eval.


Автор: kimoog 9.8.2007, 15: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  
Буду очень благодарен на любую подсказку.

Автор: AKS 9.8.2007, 16:41
kimoog, попробуйте вместо eval использовать window.execScript (только для IE, есст.) с тем же аргументом...

Автор: kimoog 9.8.2007, 18:00
Цитата(AKS @  9.8.2007,  16:41 Найти цитируемый пост)
kimoog, попробуйте вместо eval использовать window.execScript (только для IE, есст.) с тем же аргументом...

После изменений, в опере и лисе поиск перестал работать, делаю запрос и висит форма.

Автор: AKS 9.8.2007, 18:22
Цитата(kimoog @  9.8.2007,  18:00 Найти цитируемый пост)
После изменений, в опере и лисе поиск перестал работать...

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

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

Автор: kimoog 10.8.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=[];

правильно я понял ?

Автор: Exception 10.8.2007, 18:45
Да. А вообще, неплохо бы нам показать текст ошибки и этот самый responseText, который у него не получается выполнить.
P.S. Использовать тег font это дурной тон по отношению к пользователю и его браузеру.

Автор: kimoog 10.8.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: 'Каталог'
}));

Автор: Exception 10.8.2007, 22:46
http://keelypavan.blogspot.com/2006/07/system-error-1072896658-in-ie.html. Выяснилось, что по ошибке разработчики серверной части указали кодировку не "utf-8", а "UTF8" (кстати, я помню, однажды я допустил такую же ошибку). Все браузеры это "проглатывали", но в библиотеке MSXML это вызывает критическую ошибку при попытке доступа к responseText.
Проверь, какую кодировку возвращает твой скрипт.

Автор: kimoog 15.8.2007, 19:52
Цитата(Exception @ 10.8.2007,  22:46)
Проверь, какую кодировку возвращает твой скрипт.

Ох шайтан, шайтан. Действительно на сервере лежал файлик .htaccess  с 
Код
 AddDefaultCharset cp1251 
.
Теперь ясно в чем проблема, которая совсем не относится к eval. Ну да ладно. Впредь буду сначала изучать кода ошибок, а потом уж беспокоить.
Твой +

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)