Javascript 使用AJAX post更改数据属性标记后CSS未更改

Javascript 使用AJAX post更改数据属性标记后CSS未更改,javascript,jquery,css,ajax,html,Javascript,Jquery,Css,Ajax,Html,我正在设计一个网站,根据连接的MySQL数据库表的可用性字段,使用绿色或红色指示器显示资源的可用性 我希望更改的项目是一个跨度元素: <span class="equipment" data-id="1" data-available="1" data-location="0-0"></span> 如下所示,AJAX请求识别来自数据库的更改并成功地从php文件返回,只返回新的可用性(0或1)。如果我console.log()是php post URL,则设备span.

我正在设计一个网站,根据连接的MySQL数据库表的可用性字段,使用绿色或红色指示器显示资源的可用性

我希望更改的项目是一个跨度元素:

 <span class="equipment" data-id="1" data-available="1" data-location="0-0"></span>
如下所示,AJAX请求识别来自数据库的更改并成功地从php文件返回,只返回新的可用性(0或1)。如果我console.log()是php post URL,则设备span.data(“可用”)返回并存储在old\u avail中的值似乎已更新为数据库更改后所需的新值。然而,指示器的颜色变化并不能反映这方面的变化

function update_avail() {

    $('.equipment').each( function () {
        var equipment_span = $(this);

        var old_avail = equipment_span.data("available");
        var loc = equipment_span.data("location");

        $.post('avail.php?a='+old_avail+'&l='+loc, function(new_avail) {
            if(new_avail != old_avail) {
              equipment_span.data("available", new_avail);  
            }
        })
    })
}

如果有人能为我指出哪里出了问题,那就太好了,因为在这个阶段,这已经困扰了我好几个小时了

这是因为这条线:

equipment_span.data("available", new_avail);
当jquery管理数据属性时,它在内存中而不是“在页面上”进行管理,因此,如果您检查页面,它将显示可用数据=“页面加载时的数据”

您需要执行以下操作:

equipment_span.attr("data-available", new_avail);

更新后是否检查了呈现的HTML?事实上,它是否有可用的
数据class='0'
?我会使用双引号,但我不确定这是否重要(
.device[data available=“0”]
)使用.attr:类似的问题(以及原因)(老实说,听起来像是重复的):。简而言之,只有.attr允许您编辑属性的值,而.data不允许,它只是读取并存储在其他地方,但根本不修改dom。
equipment_span.attr("data-available", new_avail);