我有以下javascript,但现在收到错误:Uncaught TypeError: responseHandler is not a function
var Message = {
initialMessageList: function(profile_id) {
$('.messages-list profile'+ profile_id).html = '<div class="message-loader profile"+ profile_id><i class="fa fa-spinner fa-spin"></i></div>';
Message.fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));
}
initialMessageListHandler: function(data, profile_id) {
$('.messages-list .message-loader profile'+ profile_id).remove();
$('.messages-list profile'+ profile_id).html(Message.getMessageListHtml(data));
Message.bindMessageList();
$('.open-message profile'+ profile_id).first().click();
},
fetchMessageList: function(query, responseHandler) {
$.ajax({
url: '/app/messages/fetch/' + query,
dataType: 'json',
method: 'get'
})
.done(function(response) {
responseHandler(response); <--- this is the line it errors on
})
.fail(function(jqXHR) {
if (jqXHR.status == 403) {
window.location = '/';
} else {
responseHandler([]);
}
});
},
这是在改变之后:
initialMessageList: function(profile_id) {
$('.messages-list profile'+ profile_id).html = '<div class="message-loader profile"+ profile_id><i class="fa fa-spinner fa-spin"></i></div>';
Message.fetchMessageList(profile_id, Message.initialMessageListHandler);
},
initialMessageListHandler: function(data) {
$('.messages-list .message-loader ').remove();
$('.messages-list ').html(Message.getMessageListHtml(data));
Message.bindMessageList();
$('.open-message ').first().click();
},
fetchMessageList: function(query, responseHandler) {
$.ajax({
url: '/app/messages/fetch/' + query,
dataType: 'json',
method: 'get'
})
.done(function(response) {
responseHandler(response);
})
.fail(function(jqXHR) {
if (jqXHR.status == 403) {
window.location = '/';
} else {
responseHandler([]);
}
});
},
答案 0 :(得分:2)
您收到错误是因为您没有传入函数,而是调用函数的结果,这是添加括号时发生的情况。
NameVirtualHost *:10001
<VirtualHost *:10001>
DocumentRoot /var/www/dev
<Directory />
Options +FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
注意你是如何调用fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));
fetchMessageList: function(query, responseHandler) {
responseHandler(); // error, "undefined"
}
的,它没有返回值,所以它返回undefined,所以你真正在做的是
initialMessageListHandler
你应该做的是
fetchMessageList(profile_id, undefined);
fetchMessageList: function(query, responseHandler) {
responseHandler(); // error, "undefined"
}
使用匿名函数作为包装器,当你必须传递像
这样的参数时答案 1 :(得分:0)
另一种方式:您可以bind为您的函数提供所需的参数,例如
Message.fetchMessageList(profile_id, Message.initialMessageListHandler.bind(null,'', profile_id));