javascript - 如何组合从不同的 JS 文件对 Ajax 数据库的多个调用

标签 javascript ajax

我的文件中有一些进行 Ajax 调用的代码。该文件被多个其他文件作为函数调用,每次都会创建一个新实例。

这是正在调用的 JS 代码:

define(["underscore", "homeop", "domReady!"],
    function (_, homeop, domready) {
         
        var timeout = 500;
        return function (opUrl, opList, onCallback) {

            // IRRELEVANT CODE 
          
          var getFetch = function (optionName) {
                    $.ajax({
                        url: optionsUrl,
                        data: { optionNames: [optionName] }, 
                        type: "POST",
                        dataType: "json",
                        async: false,
                        traditional: true,
                        success: function (data) {
                            _.each(data, function (optionData, optionName) {
                                if (homeop.globalCache[optionName] === null) {
                                    homeop.globalCache[optionName] = optionData;
                                }
                            });
                            
                        },
                        error: function (message) {
                            console.error(message.responseText);
                        }
                    });
                };
          
          self.getInfo = function (optionName) {
            if (homeop.globalCache[optionName] === undefined) {
                    if (!_.contains(homeop.getOption(), optionName)) {
                        getFetch(optionName);
                    }
              
              // MORE IRRELEVANT CODE GOES HERE

          
          

在其他JS文件中,我调用get函数;例如

var these = new getOptions(optionsUrl, optionsList, onLoadCallback);
var getOpt = these.get(OptionsUrl);

问题是我多次调用从数据库获取信息,导致多次调用我的 JS 文件。 JS 文件的每个新实例都会创建一个 ajax 调用。

有没有办法等待所有调用完成然后从数据库获取数据?换句话说,我如何才能以某种方式将所有调用合并到我的“getOption.js”?

谢谢

最佳答案

试试这个..你也可以实现队列来代替堆栈

var optionStack = [];
var isAvailable = true;
var getFetch = function (optionName) {
  if(isAvailable){
      isAvilable = false; // function not available now
  }
  else {
    optionStack.push(optionName)
    return;
  }
  $.ajax({
    url: optionsUrl,
    data: { optionNames: [optionName] }, 
    type: "POST",
    dataType: "json",
    async: false,
    traditional: true,
    success: function (data) {
      _.each(data, function (optionData, optionName) {
        if (homeop.globalCache[optionName] === null) {
          homeop.globalCache[optionName] = optionData;
        }
      });

    },
    error: function (message) {
      console.error(message.responseText);
    },
    done: function (){
      isAvailable = true;
      if(optionStack.length > 0){
        getFetch(optionStack.pop());
      }
    }
  });
};

关于javascript - 如何组合从不同的 JS 文件对 Ajax 数据库的多个调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835513/

相关文章:

javascript - 使用 AJAX 将部分 JSON 对象加载到 Datatable

javascript - Rails 4 JQuery Ajax 未显示

javascript - 在 Python 中,您可以像在 JavaScript 中那样对字符串函数进行原型(prototype)设计吗?

javascript - BJQS slider 点击暂停

javascript - getElementById 不适用于 pageslide.js

javascript - AJAX post 在集合中创建一个新条目,但不发送实际数据

javascript - 无限滚动json获取新结果

javascript - 无法使用 javascript 获取属性的值

php - SilverStripe 自定义电子邮件表单 - jQuery.ajax 不将变量传递到服务器

发布 jQuery 时 JavaScript 数组被编码