【发布时间】:2017-01-08 17:09:00
【问题描述】:
所以我终于不知所措了,在这里寻求一些指导。
总结一下这个想法,我正在使用 ajax 调用来获取反馈的闭包中编写一小段代码。代码会这样使用...
var myFeedback = feedback();
然后我需要一些公开的方法,它们会像这样调用......
myFeedback.successMessages();
这将返回一个仅包含成功消息的数组。将有错误消息、信息消息和所有消息的方法。
如果整个反馈对象是硬编码的,我可以轻松编写它,我的问题是反馈对象是从 ajax 调用中提取的。在过去 6 个小时左右的时间里搜索并尝试了不同的解决方案,我终于能够安排一个函数,其中来自 ajax 调用的所有值都已正确设置,其余函数按正确的顺序运行。
关于我无法解决的问题......我到底如何返回方法对象以公开它们?在 ajax 调用之前它很容易,但是为了异步性质,我必须将 return 放在另一个函数中,但我似乎无法将它一直返回到基本 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 结果等的验证,但现在我只需要克服这个障碍。
提前谢谢大家!!
【问题讨论】:
-
主要问题是您有一个异步函数 ($.ajax),看起来您希望使用您定义的方法而忽略 $.ajax 的异步性质 - 您想要实现的是然而,相对简单,使用的代码需要重写才能可靠地工作
-
@JaromandaX 感谢您的回复。我了解异步问题,这就是我绊倒的原因。从我围绕 SO 收集的内容来看,是在 ajax 调用中执行回调并将其放入一个变量中,这在某种程度上是一种承诺。我已经尝试过了,并成功地让订单正常工作。但方法上没有成功。有什么想法吗?
标签: javascript jquery ajax methods