我正在对API服务器进行ajax调用。我已经在我的代码中的多个地方拨打了/getobjectdetails/
的特定电话,所以我想我会尝试让它更清洁,但这是我第一次钻研进入这样的回调。这是我尝试的代码:
let api = (function () {
return {
getObjectDetails(id, successCallback, errorCallback) {
$.ajax({
type: 'GET',
url: app.apiServerRoot + '/api/getobjectdetails/?Id=' + id,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + user.authToken);
},
success: successCallback(data,s,xhrdata),
error: errorCallback(e)
});
}
}
})();
但是当我把它称为测试时:
api.getObjectDetails(1008,function(data,s,x){console.log(data)},function(e){console.log(e)})
我收到以下错误:
Uncaught ReferenceError: data is not defined
at Object.getObjectDetails (api.js:13)
at <anonymous>:1:5
我做错了什么?
答案 0 :(得分:2)
将您的ajax成功参数更改为:
button.addEventListener('click', myCallback);
您之前的做法是直接执行该功能。 您想传递函数的引用而不执行它。
例如,当您绑定click事件时,您希望传递引用:
button.addEventListener('click', myCallback());
而不是
{{1}}
答案 1 :(得分:1)
如错误所示,当您致电successCallback
时,数据未定义。
试试这个:
let api = (function () {
return {
getObjectDetails(id, successCallback, errorCallback) {
$.ajax({
type: 'GET',
url: app.apiServerRoot + '/api/getobjectdetails/?Id=' + id,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + user.authToken);
},
success: (data, s, xhrdata) => successCallback(data,s,xhrdata),
error: (e) => errorCallback(e)
});
}
}
})();
箭头函数表示法和函数声明之间没有太大区别。
你可以写下以下任何一个:
success: (data, s, xhrdata) => successCallback(data, s, xhrdata)
success: (data, s, xhrdata) => {
successCallback(data, s, xhrdata);
}
success: function(data, s, xhrdata) {
successCallback(data, s, xhrdata);
}
答案 2 :(得分:0)
您需要传递success
和error
一个函数。你不应该自己调用这个函数。
当您将括号放在函数名称后面时,它会立即调用它。所以不是你写的,而应该是:
let api = (function () {
return {
getObjectDetails(id, successCallback, errorCallback) {
$.ajax({
type: 'GET',
url: app.apiServerRoot + '/api/getobjectdetails/?Id=' + id,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + user.authToken);
},
success: function(data, s, xhrdata) {
successCallback(data,s,xhrdata);
},
error: function(e) {
errorCallback(e);
}
});
}
}
})();