我正在为我的学校/工作场所开发一个注册系统,讲师需要一份分为5个不同类别的学生的完整名单:
- 未会面且未登记缺席
- 上午8点后未见面但登记缺席
- 上午8点前未见面但登记缺席
- 已会面,但已登记上午8点后缺席的原因
- 上午8点前会面并登记
由于第一个(未见过面且未注册(将在3个数据库中加载学生数据进行检查,因此获取数据可能需要一些时间。我想,不是通过PHP加载所有数据,而是在加载完所有数据之前向用户显示一个白色屏幕,而是加载页面,然后使用JQueryAJAX函数获取数据。
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发送该id来获得可靠的数据。这就是为什么我认为类似的东西是适用的:
$("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"));