所以我终于不知所措,并在这里寻求一点指导。
总结一下这个想法,我在一个闭包中编写了一小段代码,该闭包使用ajax调用来获取反馈。代码将像这样使用......
var myFeedback = feedback();
然后我需要一些暴露的方法,这样就会被调用......
myFeedback.successMessages();
将返回仅包含成功消息的数组。将有一种错误消息,信息消息和所有消息的方法。
如果整个反馈对象都是硬编码的话,我可以轻松编写它,我的问题是反馈对象是从ajax调用中提取的。在过去的6个小时内搜索和尝试不同的解决方案,我终于能够安排一个函数,其中ajax调用的所有值都设置正确,其余的函数按正确的顺序运行。
关于我无法解决的问题......在世界上我如何返回方法对象来暴露它们?在ajax调用之前它很容易,但是对于异步性质,我必须将返回放在另一个函数中,但我似乎无法将它一直返回到基本feedback()
函数。我尝试了很多方法,但仍然没有成功。
目前,我得到的错误是Type error feedback(...) is undefined
我在feedback()
正确的某个时刻得到了它,但是我尝试访问的方法会出错...... successMessages is not a function
嗯,足够的谈话......这里是代码。正如你所看到的,我最后的微弱尝试就是这样回归......
methods => getFeedback => feedback
除了基础知识之外,我在理解链接和暴露的回报方面远非如此,所以我希望你们能够解释我的问题。
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结果的验证,但是现在我只需要克服这个障碍。
提前谢谢大家!!
答案 0 :(得分:1)
使用jquery.ajax返回一个promise的事实,使得这段代码比你想象的更简单
Shift Cells Down
用法是
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