AJAX JSONP调用时执行时间重叠
我有一个jsonp ajax调用,它被执行并将数据返回给我的main函数。
这是通过调用that.mainfunction(newData);
在success函数中完成的that.mainfunction(newData);
这意味着第二次调用main函数,我认为我正在运行时间/执行问题。
在第一次迭代中运行时, newData
为空,并返回空主函数。 我必须使用这个框架的主要function。 所以另一个控件试图调用空的getter。 因此控制是空的。
然后第二次迭代开始。 数据在这里,脚本调用that.mainfunction(newData);
并将数据返回到main函数。
但
第二次迭代运行的时间太晚,无法将数据传输到控件。 因为它已经尝试获取数据。
如何避免这个时间/执行问题? 在使用jquery时是否可以发布/订阅一些事件总线?
这是一些代码:
sap.designstudio.sdk.Component.subclass("component", function() { var that = this; this.processDataFromServer = function(){ function getData(callback){ $.ajax({ url: path, dataType: 'jsonp', contentType: "application/json", success: function(data){ callback(data); } }); }; getData(processData); function processData(data){ this.processDataFromServer(data); }; } this.mainFunction = function(newValue){ if(typeOf(newValue) == "undefined"{ this.processDataFromServer(); } else { return newValue; } }
}
我看到你正在使用$.ajax
,所以我认为应对这个挑战最干净的方法是使用jQuery promise / deferred – 这将确保在适当的时间执行。 我自己利用承诺来确保干净的ajax请求/响应。
.promise()方法返回一个动态生成的Promise,一旦绑定到已排队或未排队的集合的某个类型的所有操作都已结束,它就会被解析。
jQuery Doc
有关承诺/延期模式的全面演练: http : //www.danieldemmel.me/blog/2013/03/22/an-introduction-to-jquery-deferred-slash-promise/