Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ругается на функцию, но она есть и выполняется. сначала ругается потом выполняет.OnLoad. 
:(
    Опции темы
dmitryk1
Дата 13.7.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.6.2008
Где: Новосибирск

Репутация: нет
Всего: 2



Есть две функции в подключаемом скрипте  <script type="text/javascript" src="js/dvk.js"></script>:


Код


jQuery.fn.cellXL = function (row,col) {
     return this.cell(col,row);         
};
jQuery.fn.resizeXL = function (row,col) {
     return this.resize(col,row);         
};
      

jQuery.fn.Array2Table = function(dtArr){
    var strTable="";
    //debugger;
    var table;
    //$(this).clear();
   
   if (dtArr.length!=0){
      table=$("<table></table>").resizeXL(dtArr.length,dtArr[0].length).appendTo(this);
    
   for(var i=0; i< dtArr.length;i++){
        for(var j=0; j< dtArr[i].length;j++){
            table.cellXL(i,j).html(dtArr[i][j]);
        }
   }
    
    table.tableEnd();
    
  return table;
  }else{
  return $('#'+id).html("<tr id=nFound><td>Ничего не найдено</td></tr>");
  }
  
  
};  

//jQuery.fn.ajsTable.addHead = function(text) {

//      this.

//};

//функция принимает урл и параметры передаваемые в урл методом гет.
//далее функция получает JSON массив, который преобразует в таблицу
// и прицепляет его к элементу относительно которого вызвана функция.
jQuery.fn.ajsTable = function(url,param){
   // debugger;
       param.rand=Math.random;
       var tparent=this;
       var rettbl;
       $.get(url,param
      //          {rtHost:"stipcol.paysys.es-nso.ru",rand:Math.random},
                ,
                function(data)
                {
                    //debugger;
                    alert(url);
                    try{
                    var json=JSON.parse(data);
                    if(json)
                    {
                        //var tbl="jst";//tparent[0].id+"_tbl";
                        //debugger;
                         rettbl=$(tparent).Array2Table(json)//,tbl)//;                         //$("#"+tbl)
                         .all().css( {border : 'black 1px solid'}).tableEnd();
                        
                    }
                      }catch(err){
                        rettbl=$('<table border=1"></table>').resize(0,0).appendTo(tparent)
                                .all().html(err & "  " & data).tableEnd();
                        
                    }

                }
            );  
            
            return rettbl;
            
};    


Сразу после загрузки страницы начинает выполняться код:

Код

   jQuery(
     function(){
     
     BigTable=$("<table style='border-style: solid; border-width: inherit; border-color: #000000; width: 100%;'></table>")
     .resizeXL(10,2).appendTo(document.body);//.tableEnd();  
     
     
//debugger;
       $(BigTable).cellXL(0,0)
        .html("server.ru").tableEnd();  
        $(BigTable).cellXL(0,1).ajsTable(
                        "http://10.2.8.18:8088/cgi-bin/ssh/sudosshconnect.pl",
                        {rtHost:"server.ru",
                            cmd:"df"}
                        )
                
                    .tableEnd();  
for(var i=1;i<11;i++){
        $(BigTable).cellXL(i,0).html(i).tableEnd()
            .cellXL(i,1).html("[=]").tableEnd();  

}

);    


tableEnd, cellXL из плагина jquery.tableHelper.js, который скачал с сайта и который работает почти без нареканий.

проблема возникает при загрузке "Ошибка выполнения Microsoft JScript: 'cellXL(...).ajsTable(...)' -  есть null или не является объектом"
и дебаггер останавливается на строке         $(BigTable).cellXL(0,1).ajsTable(

При отладке при нажатии пошагового прохождения, спрашивает отправить ли исключение в программу минуя дебаггер. При нажатии нет выводит таблицу с [=] а потом таблицу из функции .ajsTable(
При нажатии да - уходит в дебри jQuery  на строку - return typeof jQuery :
Код

        // Init the element's event structure
        var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
            handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
                // Handle the second event of a trigger and when
                // an event is called after a page has unloaded
                return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
                    jQuery.event.handle.apply(arguments.callee.elem, arguments) :
                    undefined;
            });



и дальше таблица с [=] не загружается, а таблица из  .ajsTable( грузится.

Я уже голову сломал. Предполагаю что скрипты не успевают прогрузиться до запуска процедуры    jQuery(); однако не знаю как бы запустить попозже... да и не логично это, скрипты же тоже дом составляют, а эта процедурка запускается после прогрузки всего DOMа.


И самое странное, иногда, когда я нажимаю отмену от использования отладчика на ожибке не сразу, процедура выполняется дважды. И выводит две одинаковых таблицы соответственно.


PM MAIL GTalk Jabber   Вверх
IDVsbruck
Дата 14.7.2009, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Типичная ньюбовская ошибка: строка "return tettbll;" выполняется ДО того, как закончится обработка $.get, поэтому rettbl так и остается неопределенной.
Думаю, что нужно делать не вызов функции с возвратом, а разбивать на 2 части функцию - первая часть заканчивается и вызывает функцию с $.get, а когда возвращается ответ, то из нее вызывается вторая часть основной функции (с того момента, когда сейчас возвращается rettbl).
PM MAIL   Вверх
dmitryk1
Дата 14.7.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.6.2008
Где: Новосибирск

Репутация: нет
Всего: 2



Цитата(IDVsbruck @ 14.7.2009,  08:18)
Думаю, что нужно делать не вызов функции с возвратом, а разбивать на 2 части функцию - первая часть заканчивается и вызывает функцию с $.get, а когда возвращается ответ, то из нее вызывается вторая часть основной функции (с того момента, когда сейчас возвращается rettbl).

Да, я ещё учусь smile ... Долго уже :-/ 


А вот про разбивание функции, я делал такой возврат исключительно чтобы плагин соответствовал jQuery вскому построению цепочек. 

Код

 $(BigTable).cellXL(0,1).ajsTable(...).cellXL(0,0).html("dummy"). cellXL(1,0).ajsTable(...).. ... ...;  


Хотя конечно это не столь критично, веселее другое:
Код


 jQuery(
     function(){
     
     BigTable=$("<table style='border-style: solid; border-width: inherit; border-color: #000000; width: 100%;'></table>")
     .resizeXL(10,2).appendTo(document.body);//.tableEnd();  
     
     
//debugger;

       $(BigTable).cellXL(0,0)
        .html("stipcol.paysys.es-nso.ru");
       $(BigTable).cellXL(1,0)
        .text("stipra3.paysys.es-nso.ru");
        
        
        
                
        
        $(BigTable).cellXL(0,1).ajsTable(
                        "http://10.2.8.18:8088/cgi-bin/ssh/sudosshconnect.pl",
                        {rtHost:"stipcol.paysys.es-nso.ru",
                            cmd:"df"
                        });//.tableEnd();  
                    
       $(BigTable).cellXL(1,0)
        .text("stipra3.paysys.es-nso.ru");
        //.tableEnd();  
        $(BigTable).cellXL(1,1).ajsTable(
                                "http://10.2.8.18:8088/cgi-bin/ssh/sudosshconnect.pl",
                        {rtHost:"stipra3.paysys.es-nso.ru",
                        cmd:"df"
                        });//.tableEnd();    


в таком виде, с неизменным остальным кодом всё работает без проблем...

PM MAIL GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.