javascript - 如何使用事件处理程序创建 5 个 JQuery AJAX 调用?

标签 javascript jquery ajax event-handling dom-events

我正在为我的学校/工作场所开发一个注册系统,教师需要一份完整的学生名单,这些学生分为 5 个不同的类别:

  • 没有见面也没有登记缺席
  • 没有见面但在早上 8 点后登记缺席
  • 没有见面但在早上 8 点之前登记缺席
  • 已在上午 8 点后开会但已登记缺席原因
  • 在早上 8 点之前会面并登记

由于第一个(未见面且未注册)将跨 3 个数据库加载学生数据以进行检查,因此获取数据可能需要一些时间。我想与其通过 PHP 加载所有数据,在加载所有内容之前向用户显示白屏,不如加载页面,然后使用 JQuery AJAX 函数获取数据。

AJAX 加载和显示使用此代码工作:

//Not met and not registered
div1 = $("#not-met-not-registered");
    div1.find(".text").html("<img src='' class='loader'>");
    $.post("/admin_post/getusers", {area:"not-met-not-registered"}, function(data) {
        div1.find(".text").html(data);

        div1.find("tr").each(function (row) {
            datatable1.push({
                "Row": $(this),
                "Navn": $(this).find("td.navn").html()
            });
        });
    });

但是,这只适用于我静态输入 div 值,并将 div 值保存在 5 个不同的名称(div1、div2 等)中。

为了接收数据,我有 5 个 div,如下所示:

<div id="not-met-not-registered" class="list">
    <label>Students who have not met and not registered absence</label>
    <img src="/images/search.png" class="search">
    <input type="text" class="search">
    <div class="text"></div>
    <input type="button" value="Print">
</div>

每个 div 都有唯一的 id,AJAX 应该通过 POST 发送它来获取可靠的数据。这就是为什么我认为类似这样的东西是适用的:

$("div.lists div.list").each(function() {
    $(this).on("ready", {div: this}, function (eventObject) {
        div = eventObject.data.div;
        $.post("/admin_post/getusers", {area: $(div).attr("id")}, function (data) {
            div.find("div.text").html(data);

            div.find("tr").each(function (row) {
                datatable.push({
                    "Row": $(this),
                    "Name": $(this).find("td.name").html()
                });
            });
        });
    });
});

该函数会将有问题的 div 保存在 eventObject.data 数组中,并使用该 div 的 ID 作为 PHP 页面上的搜索条件。通过将 div 保存为 eventObject 中的一个值,我将能够在我想到的其他地方使用相同的名称,因为如下所示,这个想法适用于我使用事件处理程序的搜索功能。

使用功能性事件处理代码为每个表提供了自己的搜索机会,但尚未为完整目的而构建:

$(this).find("input[type=text].search").on("change", {preVal: ""}, function (eventObject) {
    preVal = eventObject.data.preVal;
    curVal = $(this).val();

    if (preVal != curVal) {
        eventObject.data.preVal = curVal;
        alert(curVal);
    }
});

我知道我不是一个非常熟练的 JS 或 JQuery 编码器,也许我正在偏离最佳实践或遗漏一些非常明显的东西。不管怎样,我真的希望你能帮我!

最佳答案

我设法找出问题出在哪里,并认为我会在此处发布它。

所以,出于某种原因,当你在 JQuery 中调用一个函数并在其中保存一个变量时,下次你调用同一个函数并在变量中保存一个新值时,新变量将保存在旧函数调用中.

现在我将元素e保存在div中

div = e;

当我调用它 5 次时:

div = 1
div = 2
div = 3
div = 4
div = 5

然后,当 AJAX 返回时,它看到的是:

div = 5
div = 5
...

通过删除它的 div 部分,我让它工作了:

function load_in(e, link, target, data)
{
    $.post(link, {data:data}, function(data) {
        $(e).find(target).html(data);
        enable(e);
        setCount(e);
    });
}

此函数采用电子元素、AJAX 链接、您希望结果进入的目标以及您希望作为 POST 数据发送的任何数据

可以这样调用:

load_in(this, "/admin_post/getusers", "div.list", $(this).attr("id"));

关于javascript - 如何使用事件处理程序创建 5 个 JQuery AJAX 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783933/

相关文章:

javascript - AJAX调用成功并返回数据后更新 View

Jquery 使用 FormData POST 图像和字符串

javascript - 什么是 Javascript 中 window.open() 的返回类型

javascript - 如何使用 javascript 获取任何控件的 ID?

javascript - 首先将多个 div 的高度存储在数组中,然后将它们应用到其他元素

javascript - 从 URL 获取动态查询字符串参数 - AngularJS

javascript - 悬停时更改 GridView

javascript - 用于删除网站上部分 img href 的脚本

javascript - 停止使用 v-model 进行多字段填充?

javascript - 为什么 pasring css 失败以及如何在浏览器中成功测试解析 css