在我的网站客户可以更新他们的个人资料。在数据库上完成更新后,我希望页面本身更新并显示当时的数据。为此,我对外部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
不是eltoken
的父级。只要加上eg。一个通用的div
。
$.get(location.href, function (datos) {
datos = $('<div></div>').append(datos);
($(datos)).find("#eltoken").html());
...
参见我的类似示例https://jsfiddle.net/011g253w/1/
你的代码在正文的一个层次上有2个div。get
返回它作为选择器$(*, 'body')
= 2div数组的结果。
var eltoken = $(datos).filter("#eltoken");
var result = $(datos).filter("#cuenta_menu_fac");
https://jsfiddle.net/011g253w/2/