当前位置: 首页 > 面试题库 >

多个AJAX请求功能合为一体?

丁念
2023-03-14
问题内容

我有几乎相同的Ajax Request调用,但我需要对其进行扩展以使其更加通用

参见示例代码:http :
//jsfiddle.net/2b8gR/6/

我让它适用于Page A,并且想将其用于Page B,C,D等…,但不想为每个新的Ajax请求重写该函数

除以下内容外,大多数代码将保持不变:

  • 输入下一个/上一个(page_a_next变为page_b_next)
  • 显示页面div(display_page_a_page变为display_page_b_page)
  • 显示页码div(display_page_a_number变为display_page_b_number)
  • ajax请求url页面名称(URL:’page_a.php?page =’+ currentPageA,变为url:’page_b.php?page =’+ currentPageB,)

等等。

如何使Ajax调用和元素更通用,所以不必多次编写此请求?

注意:我需要能够跟踪当前显示的每个页面(A,B,C等)。是的,所有这些都在同一页面上

HTML:

<!-- Page A -->
<div>
    <span>Page A</span>
    <input id="page_a_next" name="page_a_next" type="button" value="Next" data-inline="true" />
    <input id="page_a_prev" name="page_a_prev" type="button" value="Previous" data-inline="true" /> 
</div>   
<div id="display_page_a_page" name="display_page_a_page">
</div>
<div id="display_page_a_number" name="display_page_a_number">
</div>

<!-- Page B -->
<div>
    <span>Page B</span>
    <input id="page_b_next" name="page_b_next" type="button" value="Next" data-inline="true" />
    <input id="page_b_prev" name="page_b_prev" type="button" value="Previous" data-inline="true" /> 
</div>   
<div id="display_page_b_page" name="display_page_b_page">
</div>
<div id="display_page_b_number" name="display_page_b_number">
</div>

JS:

var currentPageA=1;
var totalPageA=113;
loadPageA();

$("#page_a_next, #page_a_prev").click(function(){
    currentPageA = ($(this).attr('id')=='page_a_next') ? currentPageA + 1 : currentPageA - 1;

    if(currentPageA<=0) {
        currentPageA=1;                
        $('#page_a_prev').attr('disabled','disabled');
    } else if(currentPageA==114) {
        currentPageA=113;
        $('#page_a_next').attr('disabled','disabled');
    } else {
        loadPageA();
    }                
});

function loadPageA(){
    $('#page_a_next').attr('disabled','disabled');
    $('#page_a_prev').attr('disabled','disabled');

    $.ajax({
        url: 'page_a.php?page='+currentPageA,
        type: 'POST',
        error : function (){ alert('Error'); }, 
        success: function (data) {
            $('#display_page_a_number').html(currentPageA + ' of ' + totalPageA);
            $('#display_page_a_page').html(data);
            $('#page_a_next').attr('disabled','');
            $('#page_a_prev').attr('disabled','');
        }
    });
}

问题答案:

这里的关键不仅在于泛化您的JS,而且还泛化您的HTML。您还必须将currentPageA和totalPageA变量更改为array,以便它们可以容纳多个值。

观看我的演示: http :
//jsfiddle.net/Jaybles/b2uRd/

的HTML

<!-- Page A -->
<div>
    <span>Page A</span>
    <input class='pageButton' id="page_a_next" name="page_a_next" type="button" value="Next" data-inline="true"/>
    <input class='pageButton' id="page_a_prev" name="page_a_prev" type="button" value="Previous" data-inline="true" /> 
</div>   
<div id="display_page_a_page" name="display_page_a_page">
</div>
<div id="display_page_a_number" name="display_page_a_number">
</div>

<!-- Page B -->
<div>
    <span>Page B</span>
    <input class='pageButton' id="page_b_next" name="page_b_next" type="button" value="Next" data-inline="true" />
    <input class='pageButton' id="page_b_prev" name="page_b_prev" type="button" value="Previous" data-inline="true" /> 
</div>   
<div id="display_page_b_page" name="display_page_b_page">
</div>
<div id="display_page_b_number" name="display_page_b_number">
</div>

JS

var currentPage = {'a':1, 'b':1}; //Should go from A to Z
var totalPage = {'a':113, 'b':115}; //Should go from A to Z

$(".pageButton").click(function(){
    var a = $(this).attr('name').split("_");
    var page = a[1];
    var dir = a[2];
    currentPage[page]  = (dir=='next') ? currentPage[page] + 1 : currentPage[page] - 1;

    if(currentPage[page]<=0) {
        currentPage[page]=1;                
        $('#page_' + page + '_prev').attr('disabled','disabled');
    } else if(currentPage[page] > totalPage[page]) {
        currentPage[page]=totalPage[page];
        $('#page_' + page + '_next').attr('disabled','disabled');
    } else {
        loadPage(page);
    }                
});

loadPage('a');

function loadPage(page){
    $('#page_' + page + '_next').attr('disabled','disabled');
    $('#page_' + page + '_prev').attr('disabled','disabled');

    $.ajax({
        url: 'page_' + page + '.php?page='+currentPage[page],
        type: 'POST',
        error : function (){ document.title="error"; }, 
        success: function (data) {
            $('#display_page_' + page + '_number').html(currentPage[page]+ ' of ' + totalPage[page]);
            $('#display_page_' + page + '_page').html(data);
            $('#page_' + page + '_next').attr('disabled','');
            $('#page_' + page + '_prev').attr('disabled','');
        }
    });
}


 类似资料:
  • 在我的nodejs应用程序中,我有一个包含以下内容的文件: index.js目录: 向上编码most每60秒检查一次my功能。此代码正常工作,但存在一个问题,例如,当5名用户在我的应用程序中联机时,我在控制台中看到重复60秒后的

  • 问题内容: 我有一个返回promise的方法,并且在内部该方法调用一个API,该API每分钟只能有20个请求。问题是我有很多对象(大约300个),并且我想为每个对象调用API。 目前,我有以下代码: 但是它不处理时序约束。我希望我可以使用_.chunk和_.debounce之类的东西,但是我无法解决这个问题。有人可以帮我吗? 问题答案: 您可以每分钟发送1个包含20个请求的块,或者每3秒将其间隔1

  • 问题内容: 我在服务器端模式下使用DataTables 1.10.15。 我通过ajax将表单的内容传递给PHP脚本,以使其搜索数据库: 我还有其他一些js,它会在将ajax请求发送到之前检查至少3个字符是否输入到字段中。 这意味着-输入3个字符后- 每次 按下一个键都会发出一个ajax请求,因此可能会有ajax请求队列。 每当发出新的ajax请求时,我如何才能将其终止,以免它们以这种方式排队?我

  • 我内部有多个ajax函数,但只执行第一个ajax请求,我不知道为什么!我添加了一些警告字段,看看它有多远。我使用的是django环境。例如,当单击bidnow-BTN时,这个jquery应该执行,但由于某种原因,在第一个ajax请求之后,页面实际上会刷新并在页面url的末尾添加类似/?bidprice=100001的内容。这是不应该发生的。

  • 需要一些关于iOS开发的帮助。Swift 5 在swift 5中,有没有办法将3个系统权限警报(相机、麦克风和照片)合并在一个警报中? 使用AVCaptureDevice访问相机和麦克风,使用PHPhotoLibrary访问照片...

  • 问题内容: 我正在使用其OData API为Netflix开发应用程序。我一直关注Stephen Walther的博客条目 ,了解如何查询OData API。在其中,他使用以下代码: 在我的应用程序中,我需要使用OData的分页链接来检索完整列表。我的代码如下: 但是,当运行时,我会不断收到。似乎回调函数被调用了两次。如果我删除该行,该应用程序将正常运行。我的问题是:离开ajax调用的代码行是否有