【问题标题】:.find() does not work on certain id's.find() 不适用于某些 id
【发布时间】:2016-09-29 10:30:55
【问题描述】:

在我的网站中,客户可以更新他们的个人数据。在数据库上完成更新后,我希望页面自行更新并显示当时的数据。为此,我对外部 php 文件进行 ajax 调用以更新 mysql 数据库。之后,我获取客户端数据页面 (location.href) 并更新一些 div 信息以显示新数据。

这是来自我的 JS 文件的 AJAX 调用:

$.ajax({
    type: "POST",
    url: "factupdate.php",
    data: {
        datos: stringDatos, 
        token: $("#token").val(), 
        isAjax: 1
    },
    success: function (codi) {
        $.get(location.href, function (datos) {
            ($(datos)).find("#eltoken").html());
            var eltoken = $(datos).find("#eltoken");
            var result = $(datos).find("#cuenta_menu_fac");
            console.log($(eltoken).html());
            console.log($(result).html());
            $(result).find(".facturacion").hide();
            $(result).find("#fac_" + num).show();
            $(result).find(".afac").removeClass("aliselected");
            $(result).find("#menu_fac_" + num).addClass("aliselected");
            $(result).find("#acc_fac").append('<span class="goodvalid">Datos de facturación actualizados</span>');
            $("#cuenta_menu_fac").html($(result).html());
            $("#eltoken").html($(datos).find("#eltoken").html());
            $("#cargandoacc").hide();
        });
    },
    error: function (e) {
        $("#cargandoacc").hide();
        alert('Ha habido un error: ' + e);
    }
});

问题是我可以看到结果数据但看不到 eltoken 的,控制台打印未定义。

此外,当我尝试执行console.log($(datos).html()); 时,它也显示为未定义。另一方面,如果我执行console.log($(datos).text());,它确实会返回网站的正确数据。

这是一些数据信息:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
...
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
</head>
<body>
<!-- Some layout divs -->



<div id="cuenta_menu_fac" class="c-menu-content">
<div class="content" id="acc_fac">

<!-- Some label and input for updating data divs -->

</div>
</div>




<!-- /Some layout divs -->
<div id="eltoken">
<input type="hidden" id="token" value="2d5951d1e3b31dfb7fd2dcc172df17fd">
</div>
</body></html>

我不明白我的代码有什么问题。有什么可能的解决方案吗?

【问题讨论】:

  • 您的请求中返回的datos的内容是什么?
  • 设置数据类型为html
  • @RoryMcCrossan datos 应该包含更新了客户端的全部信息的页面。实际上,在执行console.log($(datos).text()); 时会显示该信息,但在执行.html() 时会失败。
  • @madalinivascu 谢谢你的帮助。无论如何,我只是尝试过,同样的事情发生了......
  • 您能否将datos 包含的内容示例添加到问题中

标签: php jquery html get find


【解决方案1】:

Datos 不是eltoken 的父级。只需添加例如。一个常见的div

$.get(location.href, function (datos) {
    datos = $('<div></div>').append(datos);
    ($(datos)).find("#eltoken").html());
    ...

查看我的类似示例 https://jsfiddle.net/011g253w/1/

更新

您的代码在正文的一个级别上有 2 个 div。 get 作为选择器 $(*, 'body') = 2 个 div 的数组的结果返回它。

我为您的情况找到了更好的方法。

var eltoken = $(datos).filter("#eltoken");
var result = $(datos).filter("#cuenta_menu_fac");

https://jsfiddle.net/011g253w/2/

【讨论】:

  • 你是对的。那成功了。你能告诉我为什么我们需要在一个空的 div 中添加所有 dato 吗?如果 jquery 继承自 html 和 body 标签,为什么 jquery 不检测 #eltoken 作为他的孩子?感谢您的帮助!
  • 哦,我以为.get() 从页面本身获取了完整数据,而不仅仅是来自正文的元素。你是完全正确的,第二个答案也有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2013-06-26
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多