繁体   English   中英

使用Javascript / jQuery进行同步GET请求

[英]Synchronous GET request with Javascript/jQuery

我有一个函数,它使得ajax GET请求和基于返回的值设置一个全局JS变量。 我使用这个变量(下面的代码中的isCalculateTax)进行进一步处理:

var isCalculateTax;

function setCalculateTaxValue(taxStatementId) {
 $.get('/taxstatements/calculatetax/' + taxStatementId, function (data) {
  isCalculateTax = data.isCalculateTax;
 });
}

$(document).ready(function () {
 // initially check the tax statements dropdown to see which one is selected
 // and set the isCalculateTax to the right value
 var taxStatementId = $('#taxStatements').val();
 setCalculateTaxValue(taxStatementId);
 enumerateDocumentItems(isCalculateTax);
});

我的问题是,当enumerateDocumentItems()被调用并执行时,isCalculateTax尚未从AJAX GET请求更新,因此我收到了不可预测的结果。

如何在执行enumerateDocumentItems()之前等待必要的时间,以便isCalculateTax正确?

有两种方法可以做到这一点。 首先,您可以更改setCalculateTaxValue (并可能重命名它),以便它接受在检索值时执行的回调。 然后,您将传递enumerateDocumentItems作为回调。 或者,这实际上违背了异步性的概念,您可以将其更改为使用$.ajax并将aSync选项设置为false。 我推荐前者。

var isCalculateTax; // no longer needed?

function updateTaxValue(taxStatementId,callback) { 
 $.get('/taxstatements/calculatetax/' + taxStatementId, function (data) {
  isCalculateTax = data.isCalculateTax;
  if (callback) {
      callback.call( taxStatementId, data.isCalculateTax ); 
  }
 }); 
} 

$(document).ready(function () { 
 // initially check the tax statements dropdown to see which one is selected 
 // and set the isCalculateTax to the right value 
 var taxStatementId = $('#taxStatements').val(); 
 updateTaxValue(taxStatementId,enumerateDocumentItems); 
});

使用回调使其比直接引用回调函数更灵活一些。 如有必要,它允许您将更新代码重用于多个目的。

只需在设置isCalculateTax后立即从$ .get回调函数内部调用enumerateDocumentItems()。

只需确保UI在两者之间有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM