如何解决在调用ajax函数之前,等待复杂的函数完成具有多个ajax调用
在这里,我会尽力清楚地解释这个问题。
从最简单的任务开始,我的第一个任务是调用此create()函数,该函数内部包含2个Ajax调用
popup().create('Zip code is required to add product to cart')
create: function (popupTitle) {
let self = this;
let options = {
type: 'popup',responsive: true,modalClass: 'zip-modal',title: popupTitle,buttons: [{
text: $.mage.__('Apply'),class: 'action primary',click: function () {
if (self.validateZip(self.zipForm)) {
----------> self.getCatalog(); ------------<
this.closeModal()
}
}
}],closed: function () {
if (self.zipInput.val() === '') {
$.cookie('zip_code_set','not_set',{path: '/'})
self.lightBox.show();
}
}
};
modal(options,this.popup);
this.popup.modal('openModal');
},
getCatalog: function () {
let self = this;
let value = this.zipInput.val();
fullScreenLoader.startLoader();
storage.post(
url.build('rest/V1/zip/getCatalog'),JSON.stringify({
zipCode: value
}),true,'application/json'
).done(
function (response) {
---------> self.validateCatalog(); -----------<
fullScreenLoader.stopLoader();
},)
},
创建一个ajax发布请求,并且在它的.done()函数中还有另一个函数,该函数执行另一个ajax获取请求
validateCatalog: function () {
fullScreenLoader.startLoader();
storage.get(
url.build('rest/V1/zip/getCategory'),).done(
function (response) {
customerData.set('categoryMenu',response[0].categoryMenu);
fullScreenLoader.stopLoader();
// window.location.reload();
},
所有这些基本上都是在create()函数之后发生的,我必须调用另一个执行ajax请求的函数,但是它必须等到所有这些create()函数完成然后才触发,这是我发现的方法$ .Deferred和回调函数,但我也无法使它起作用,在每次尝试中,它总是会先用ajax请求触发此函数,然后再用全部ajax完成create()函数要求。任何帮助将不胜感激。
解决方法
作为评论可能会更好,但我没有足够的代表来发表评论。
也许有一种更有效的方法,但是我能想到的最简单的方法是使用一个布尔变量,该变量在最终ajax调用完成时会设置为true,并且只是用一个间隔来检查值...类似:>
<td>
{{$applicant_details->resume }}
<iframe src="{{asset('resume/'.$applicant_details->resume) }}" width=”100%” height=”100%”>
This browser does not support PDFs. Please download the PDF to view it: Download PDF
</iframe>
<embed src="{{asset('resume/'.$applicant_details->resume) }}" type=”application/pdf” width=”100%” height=”100%”>
</td>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。