我正在使用这样的回调调用函数:
$(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')
});
})
});
});
这是最后一次使用console.log('test')回调问题。
这是getPhone函数:
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()
}
}
})
}
回调会在它应该被触发时被触发。但是当回调存在时,我得到错误:
undefined不是函数
答案 0 :(得分:9)
else if(vCard.length > 1){ self.getPhone() }
当你正在进行下一次尝试时,你没有传递callback
- 然后在该调用中未定义。在调用它之前,应该总是测试回调是否是一个函数。
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)
}
答案 1 :(得分:6)
不确定这是否是一个问题,但这是一个开始的想法:
在你的最后一行,你有self.getPhone()
,你没有通过回调。
因此,如果您在callback();
方法中找到此代码:getPhone
,callback
可能未定义。
尝试:
if (typeof(callback) === 'function') {
callback()
}