2013-08-09 37 views
6

Böyle bir geri arama ile bir işlevi çağırıyorum:?tanımsız bir işlev değil" diyor

$(function() { 
    //get all the items 
    search.init('.result tbody tr'); 
    search.parseresults(function(announcementID){ 
     //query every single page 
     var myCompany = new company(announcementID); 
     myCompany.requestPage(function(){ 
      //on response parse the data. 
      myCompany.parsedata() 
      var myPerson = new person(myCompany) 
      myPerson.getPhone(function(){ 
       console.log('test') 
      }); 
     }) 
    }); 
}); 

O console.log ('test') ile son geri arama olmasıdır . sorun

bu getPhone-fonksiyonudur:

person.prototype.getPhone = function(callback){ 
    this.attempt++ 
    if(this.attempt === 1){ 
     var who = this.lastname; 
     var where = this.adress+' '+this.postal; 
    }else if(this.attempt === 2){ 
     var who = this.firstname+' '+this.lastname; 
     var where = this.adress+' '+this.postal; 
    }else{ 
     var who = this.firstname+' '+this.lastname; 
     var where = this.adress+' '+this.postal; 
     var url = 'http://personer.eniro.se/resultat/'+who+'/'+where; 
     console.debug('') 
     //console.debug('fail') 
     console.debug(url) 
     console.debug(this) 
     return 
    } 
    var self = this; 

    var url = 'http://personer.eniro.se/resultat/'+who+'/'+where; 
    GM_xmlhttpRequest({ 
     method: "GET", 
     url: url, 
     onload: function(data) { 
      data = $.parseHTML(data.response); 
      var vCard = $(data).find('.vcard') 
      if (vCard.length === 1){ 
       var phone = vCard.find('.tel.row a').map(function(){ 
        return this.text 
       }).get() 

       self.officePhone = phone[0]; 
       if(phone.length > 1){ 
        self.mobilePhone = phone[1]; 
       }else{ 
        self.mobilePhone = ''; 
       } 
       callback(); 

      } else if(vCard.length > 1){ 
       self.getPhone() 
      } 
     } 
    }) 
} 

olması gerektiği Ama geri arama mevcut olduğunda ben hata alıyorum ne zaman geri arama tetiklendiğinde.

Bir sonraki girişimi yapıyoruz zaman

undefined is not a function

+1

alakasız ayrıntıları atlamak için kodunuzu basitleştirmek miyim? Şansınız, probleminizi kendiniz bulacaksınız. – andreister

cevap

9
else if(vCard.length > 1){ 
    self.getPhone() 
} 

, sen callback geçen değiliz - o çağrı tanımlanmamış. Biri, her zaman'u, bir geriçağırımın çağırmadan önce bir işlev olup olmadığını sınayın.

if (vCard.length === 1){ 
    var phone = vCard.find('.tel.row a').map(function(){ 
     return this.text 
    }).get() 

    self.officePhone = phone[0]; 
    if(phone.length > 1){ 
     self.mobilePhone = phone[1]; 
    }else{ 
     self.mobilePhone = ''; 
    } 
    // also pass some reasonable result: 
    if (typeof callback=="function") callback(phone); 

} else if(vCard.length > 1) { 
    self.getPhone(callback) 
} 
6

bu bir sorun ama bir başlangıç ​​fikir emin değilim: Eğer bir geri arama geçemiyor self.getPhone() var son satırında

. Bu kod, yönteminde ulaşırsa, callback tanımsız olabilir.

Dene:

if (typeof(callback) === 'function') { 
    callback() 
}