javascript - 每个选项卡的 Ajax 调用函数

标签 javascript jquery html css ajax

我只使用 CSS 创建了响应式标签。但是当我尝试实现 ajax 调用时,我有点困惑。

我有几个问题:

  1. 为每个选项卡发出 ajax 请求的最佳方式是什么?
  2. 是否有任何最短的方式将响应附加到“tab”div?
  3. 如何在所选标签的页面加载时调用 ajax?
  4. 第一次点击标签后,不需要再次进行ajax调用。我需要缓存响应,但“cache:true”不起作用。

任何其他改进、建议和更正也会有所帮助。

示例:JSFiddle

最佳答案

如果你必须使用 ajax,我会在你需要加载的所有数据中运行一次循环,然后将数据存储在变量(或本例中的对象)中

更改事件将从已填充的 tabData 中获取 ID,您无需再次调用 ajax 页面。

现在这将解决您的缓存问题,因为在这种情况下您不需要它

如果您想在打开页面时立即填充第一个选定的选项卡,请在 ajax 成功中创建一个 if 语句

最终结果看起来是这样的:

$(document).ready(function() {
    //data for the tabs 
    var tabs = {
        1:"tabone",
        2:"tabtwo",
        3:"tabthree"
    }

    //empty object for now will be filled with ajax data
    var tabData = {};

    var activeTabVal=1;
    var activeTabID = $('input[name=tabs]:checked', ".tabs").attr('id');


    for(key in tabs) {
       ajaxCall(key);
    }



    $('.tabs input').on('change', function() {
        var activeTab=$('input[type="radio"]:checked', '.tabs').val();
        var tabElement =  $('input[name=tabs]:checked', ".tabs").attr('id');
        //since we have the data already no need to call ajax here we just get it out of our already loaded data
        var data = tabData[activeTab];
        replaceData(tabElement, data);
    });

    function ajaxCall(key){
        $.ajax({
            type: "POST",
            dataType: 'jsonp',
            url: 'https://jsonplaceholder.typicode.com/posts/'+key,
            async: false,
            cache: true,
            contentType: "application/json; charset=utf-8",
            success: function (msg) {
                tabData[key] = msg.body;
                 //use this to imediatly populate the selected div fo your second point
                if(key == activeTabVal) {
                    replaceData(tabs[key], tabData[key]);
                }
            }
        });
    }

    function replaceData(tabElement, tabData) {
        $('#'+tabElement).next().next().closest('div').append(tabData);
    }
});

关于javascript - 每个选项卡的 Ajax 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868352/

相关文章:

css - div 不以百分比表示最小高度

javascript - 以编程方式在 JavaScript 中获取和设置 jssor 的索引

javascript - 淡入鼠标移动

javascript - 如何取消绑定(bind)特定 div 内的所有事件

javascript - 循环间隔超时

javascript - 如何在 JavaScript 中使用字符串设置对象参数名称?

javascript - 在客户端缓存 1.5MB 数据的最佳方式

javascript - 切换按钮 - 单击其中一个即可切换所有切换

javascript - 使用 jquery 选择表中的 TR。

html - Font awesome 5 svg 图标和文本在顶部垂直对齐