我有以下 javascript,但现在收到错误:Uncaught TypeError:responseHandler 不是函数
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([]);
}
});
},
最佳答案
您收到错误是因为您没有传入函数,而是传入被调用函数的结果,这就是添加括号时发生的情况。
fetchMessageList(profile_id, Message.initialMessageListHandler('', profile_id));
fetchMessageList: function(query, responseHandler) {
responseHandler(); // error, "undefined"
}
注意你是如何调用initialMessageListHandler
的,它没有返回值,所以它返回未定义,所以你真正做的是
fetchMessageList(profile_id, undefined);
fetchMessageList: function(query, responseHandler) {
responseHandler(); // error, "undefined"
}
你应该做的是
fetchMessageList(profile_id, function() {
Message.initialMessageListHandler('', profile_id)
});
当您必须传递这样的参数时,使用匿名函数作为包装器
关于javascript - 传递的函数有一个变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570729/