gpt4 book ai didi

javascript - 在闭包内进行 ajax 调用后公开公共(public)方法

转载 作者:行者123 更新时间:2023-12-03 06:12:27 25 4
gpt4 key购买 nike

所以我终于不知所措,来这里寻求一点指导。

总而言之,我在一个闭包中编写了一小段代码,使用 ajax 调用来获取反馈。代码将像这样使用......

var myFeedback = feedback();

然后我需要一些公开的方法,这些方法将像这样被调用......

myFeedback.successMessages();

这将返回仅包含成功消息的数组。将有一个用于错误消息、信息消息和所有消息的方法。

如果整个反馈对象是硬编码的,我可以轻松编写它,我的问题是反馈对象是从 ajax 调用中提取的。在过去 6 个小时左右的时间里搜索并尝试了不同的解决方案,我终于能够安排该函数,其中来自 ajax 调用的所有值都已正确设置,并且其余函数都按正确的顺序运行。

所以我无法解决这个问题...我到底如何返回方法对象来公开它们?在 ajax 调用之前,这很容易,但是考虑到异步性质,我必须将返回值放在另一个函数中,但我似乎无法将其一直返回到基础 feedback()功能。我尝试了很多很多方法,但仍然没有成功。

目前,我得到的错误是类型错误反馈(...)未定义

我曾经遇到过,feedback() 是正确的,但会收到有关我尝试访问的方法的错误...successMessages 不是一个函数

好了,说得够多了......这是代码。正如你所看到的,我最后一次微弱的尝试就是像这样返回......

方法 => getFeedback => 反馈

除了基础知识之外,我还不太了解链接和暴露的返回,因此我希望你们能够对我的问题有所了解。

var feedback = function() { 

var methods = null;

var getFeedback = function (callback) {

$.ajax({
type: "GET",
url: '<?= Config::get('URL') ?>ajax/feedback',
dataType:"json",
}).done(function(response) {

console.log("Step 1: Retrieve Messages");
callback(response);

}).always(function(){

console.log("Step 3: Return Methods");
console.log(methods);
return methods;

});

}

return getFeedback(function(response) {

console.log("Step 2: Log Response");
console.log(response);

methods = {
"successMessages" : function() {
console.log(response.success);
},
"errorMessages" : function() {
console.log(response.error);
},
"infoMessages" : function() {
console.log(response.info);
},
"allMessages" : function() {
console.log(response);
},
};

});

};

我应该注意,我将添加有关 ajax 结果等的验证,但现在我只需要克服这个障碍。

提前谢谢大家!!

最佳答案

使用 jquery.ajax 返回一个 Promise 的事实,使得此代码比您想象的更简单

var feedback = function() { 
var feed = $.ajax({
type: "GET",
url: '<?= Config::get('URL') ?>ajax/feedback',
dataType:"json",
});

return {
"successMessages" : function(callback) {
feed.then(function(response) {
callback(response.success);
});
// note 1
},
"errorMessages" : function(callback) {
feed.then(function(response) {
callback(response.error);
});
// note 1
},
"infoMessages" : function(callback) {
feed.then(function(response) {
callback(response.info);
});
// note 1
},
"allMessages" : function(callback) {
feed.then(function(response) {
callback(response);
});
// note 1
}
};
};

用法是

var myFeedback = feedback();

myFeedback().successMessages(function(success) {
console.log(success);
});

myFeedback().errorMessages(function(error) {
console.log(error);
});

myFeedback().infoMessages(function(info) {
console.log(info);
});

myFeedback().allMessages(function(response) {
console.log(response);
});

如果你return feed;我有note 1,你可以让它变得更简单

var myFeedback = feedback();

myFeedback().successMessages(function(success) {
console.log(success);
}).errorMessages(function(error) {
console.log(error);
}).infoMessages(function(info) {
console.log(info);
}).allMessages(function(response) {
console.log(response);
});

关于javascript - 在闭包内进行 ajax 调用后公开公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com