Javascript AJAX,在返回的数组上执行数学函数,结果为NaN?
我正在进行一个ajax调用以更新引导程序进度条,ajax调用成功后,我有以下内容:Javascript AJAX,在返回的数组上执行数学函数,结果为NaN?,javascript,ajax,Javascript,Ajax,我正在进行一个ajax调用以更新引导程序进度条,ajax调用成功后,我有以下内容: $(function () { var percent = data['minutes'] / 30 * 100; $('#progressbarr').html("<div class='bar' id='progressbar' style='width: "+ percent +"%;'></div>"); } 尝试先使用以下命令将其强制为数字类型: var pe
$(function () {
var percent = data['minutes'] / 30 * 100;
$('#progressbarr').html("<div class='bar' id='progressbar' style='width: "+ percent +"%;'></div>");
}
尝试先使用以下命令将其强制为数字类型:
var percent = parseInt(data['minutes']) / 30 * 100;
您的ajax回调周围有一个$()
,删除它,一切都应该正常
失败的JSFIDLE(基于您的代码):
使用JSFIDLE(不使用
$()
):为了安全起见,请使用parseInt(数据['minutes'))
尝试一下,看看它是否有效。我知道你说了两遍肯定是一个数字,但请幽默我。数据['minutes']
可能是未定义的
,这表明此代码在Ajax完成之前运行。也许您是正确的,data['minutes']
最终会保存一个数值,但在代码运行时它不会。检查console时,POST会返回数值value@JohnDOe出于好奇,为什么成功回调中有$(function(){})
?您确实意识到这与$(document.ready(function(){})相同代码>并在页面准备就绪时执行,而不是在ajax调用返回时执行。您的成功回调实际上是在$(document).ready()上运行的,而不是在ajax事件成功时运行的。删除$(函数(){
并关闭})从成功回调中选择code>,您应该会没事。警报(数据类型['minutes');警报(数据[分钟])代码>并最终parseInt(数据['minutes'])| | 0
。对不起,data['minutes']
不是你当时认为的那样。在计算之前,请立即输入以下内容:alert(parseInt(数据['minutes'))
well。。这很奇怪。。。让NaN保持警惕。。。也许你可以帮我找到根目录,然后我从MySQL日期字段中获取一个日期,然后我执行$start\u date->diff($since\u start);要获取从现在到保存日期的间隔,$TTL['minutes']=30-$minutes;然后减去时间,然后使用echo json_encode($TTL)对其进行回显;请编辑您的问题,以便我们可以查看数据
的设置位置和方式-您提到您正在使用AJAX,您可能试图在设置数据之前访问它。如果没有+
,您的小提琴也能正常工作,这表明OP的问题(无论是什么)没有在您的代码中解决。
$ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM `login_attempts` WHERE ip = '$ip'";
$result = mysqli_query($con, $query);
while ($row = mysqli_fetch_array($result)) {
$banned = $row['date'];
}
$start_date = new DateTime($today);
$since_start = new DateTime($banned);
$interval = $start_date->diff($since_start);
$minutes = $interval->days * 24 * 60;
$minutes += $interval->h * 60;
$minutes += $interval->i;
$TTL['minutes'] = 30-$minutes;
echo json_encode($TTL);
var percent = parseInt(data['minutes']) / 30 * 100;