I'm calling a function with a callback like this:
$(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')
});
})
});
});
It's the last callback with console.log('test') that is the problem.
this is the getPhone-function:
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()
}
}
})
}
The callback gets triggered when it's supposed to. But when the callback is present I get the error:
undefined is not a function
In your last line you have self.getPhone (), where you do not pass a callback. So, if you reach this code: callback (); in the getPhone method, callback may be undefined. Thanks for contributing an answer to Stack Overflow!
The "callback is not a function" error occurs when we define a callback parameter to a function, but invoke the function without passing a callback as a parameter. To solve the error, provide a function as a default parameter, or always provide a parameter when calling the function. Here is an example of how the error occurs.
When you're doing the next attempt, you're not passing on the callback - then is undefined in that call. One should always test whether a callback is a function before invoking it.
However, when you called the function you only gave it ONE parameter: input Hence, when your code is executed and it reaches this part of the function var key = callback (item); it throws and exception because callback is undefined since you did not pass in a second argument.
Not sure if this is a problem but it's a starting idea:
In your last line you have self.getPhone()
, where you do not pass a callback.
So, if you reach this code: callback();
in the getPhone
method, callback
may be undefined.
Try:
if (typeof(callback) === 'function') {
callback()
}
else if(vCard.length > 1){ self.getPhone() }
When you're doing the next attempt, you're not passing on the callback
- then is undefined in that call. One should always test whether a callback is a function before invoking it.
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)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With