我正在使用ajax函数从数据库中检索信息。我设置了API,而ajax函数确实检索了正确的值,但是我作为参数传递的回调函数在onreadystatechange上不起作用。
下面的简化代码
function serializeArgs(args) {
//Serialize Arguments
}
function callback(a) { //The function to be called as callback
//Process the response and add contents to the page
}
function getListData(callback) {
var ajaxOptions = {
action: "get_data",
}
var request = new XMLHttpRequest();
request.open("POST", apiurl, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
request.setRequestHeader("Accept-language", "en-US");
request.onreadystatechange = function(event) {
if (this.readyState == 4 && this.status == 200) {
callback(this.response);
}
};
request.send(serializeArgs(ajaxOptions));
}
当我运行函数时,出现错误“ TypeError:回调不是函数”
我整天都在苦苦挣扎,但是由于我对ajax经验不足,所以我不知道为什么会发生这种情况以及如何解决。我有一种预感,它与ajax的异步性质有关,但是我不确定如何解决此问题。
您在哪里调用函数getListData
?
我的猜测是,您像getListData()
一样调用它而没有传递回调函数。如果您像getListData(callback)
这样称呼它,它应该可以工作。没有完整的代码示例,很难说会发生什么。
仅用于测试,您也可以更改行
function getListData(callback) {
到
function getListData() {
只是看它是否有效。
[在第二个版本中,您不传递回调,因此,当您调用callback
函数时,JavaScript会在父作用域中查找它。
此错误的简短参考:
通常在发生以下情况时出现此错误:
我在您的ajax函数中注意到以下内容:
您的参数名为callback
,就像您的函数callback
一样。您的ajax函数要执行的操作是将参数callback
用作函数(不确定是否将函数callback
作为参数传递,如果可以,那么就可以了,但是由于我看不到您的位置)调用getListData
函数,我只能猜测您正在调用它而没有将函数callback
作为参数传递。
//Your function callback is trying to access this parameter.
//So unless your actual function callback is being passed in as an argument,
//it's most likely trying to access your parameter even though it is NOT a function or it isn't even receiving a function as parameter
function getListData(callback)
function callback(a)
这应该可以解决问题。