javascript - Js 中具有多个依赖 Ajax 调用的循环

标签 javascript jquery ajax

这个问题旨在解决令人头脑 NumPy 的循环,该循环包含依赖于先前 ajax 调用的 ajax 调用。

循环这些的最佳且有效的方法是什么?任何术语都很棒。

考虑这个例子:

elements : {
  'make' : obj,
  'model': obj,
  'trim' : obj
}
values  : {
  'model': 'a4',
  'trim' : 'base'
}

methods.updateElements(elements['make'], function(){

  methods.updateElements(elements['model'], function(){
    // Set previous element's value.
    elements['model'].val(values['model']);

    methods.updateElements(elements['trim'], function(){

      elements['trim'].val(values['trim']);  
    });
  });
});

如您所见,之前的方法打破了 DRY 经验法则。

哪里methods.updateElements(element, callback)方法包含一个简单的getJson请求将带有值数组的 json 转换为 select element 上的选项列表并调用callback一旦完成。

methods.updateElements(el, callback){
     // get the value of el
     // Get an ajax request with an array of different models
     // Append each item in the array as an option in the el
     callback();
}

如上所示,elements['model']取决于前一个元素的值,该值是单独的,直到获取其余其他相关数据为止。

现在,这个特定的代码很短,但很快就会变得困惑,如elementsvalues物体的长度变得更长。

我们可以创建什么方法来防止 methods.updateElements如何避免变得太长?

最佳答案

当您阅读有关 Promise 的内容时,我建议您查看 jQuery 自己的 $.Deferred 实现。 .

这些将为您提供一种方法来跟踪并发异步请求,或设置请求链,以便它们仅在一组特定的先前请求或操作完成后才会发生。

如果您想深入研究该主题,您还应该查看有关延续的文档: http://en.wikipedia.org/wiki/Continuation

关于javascript - Js 中具有多个依赖 Ajax 调用的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22001302/

相关文章:

javascript - firefox 6 中的 mac 魔术鼠标水平滑动/滚动问题

javascript - 当旧浏览器不接受 jquery 时的替代方案

javascript - 表单验证并提交ajax

javascript - setTimeout 有限制吗?

javascript - 运算符的条件运算符

javascript - 默认情况下,异步 Javascript XMLHttpRequest 不应该设置 XMLHttpRequest 请求 header 吗?

javascript - 单击 Accordion 标题上的按钮时显示/隐藏按钮 - jQuery

jquery - 如何防止自定义 Mailchimp 表单在提交时重定向?

python - 在 AJAX 请求完成后抓取页面

javascript - 唯一选择选项值