[英]AJAX GET not updating a Javascript variable on page load
我有一个关于将PHP变量通过AJAX / JSON传输到JavaScript的问题。
我希望var ChronoID在页面加载时使用从AJAX获取,从PHP代码获取的值进行更新。 即使它在AJAX中可以正常工作,它也可以返回未定义状态 ,并且不会更新变量供以后使用。
我在做什么错,将PHP变量传输到Javascript的最佳方法是什么?
-scripts.js
$(document).ready(function () {
var jsonGet;
var chronoID;
var timeworked;
var startAt;
$.ajax({
type: "GET",
url: "detectopencrono.php",
dataType: "json",
success: function (response) {
jsonGet = response;
console.log(jsonGet); // JSON Array (works)
var arr = $.map(jsonGet, function (el) {
return el;
});
console.log(arr); // JavaScript Array (after parse, works)
chronoID = arr[0]; // (works)
$("#chrono" + chronoID + "").show(200);
console.log(chronoID); // Works, shows value
}
});
console.log(chronoID); // Undefined (doesn't work)
});
-detectopencrono.php
<?php
include("connection.php");
session_start();
/*if (isset($_POST['projectname'], $_POST['startyear'], $_POST['startmonth'], $_POST['startday'], $_POST['deadyear'], $_POST['deadmonth'], $_POST['deadday'], $_POST['lider'], $_POST['hours'], $_POST['budget']))
{*/
$iduser = $_SESSION['ID'];
if(isset($_SESSION['gbsn']))
{
$wasopenresult = mysqli_query($mysqli, "SELECT ID, IsGbsn FROM subtask WHERE Crono='Y' AND IsGbsn='Y' AND IDUser='$iduser'")
or die("Não foi possivel executar o pedido.");
}
else
{
$wasopenresult = mysqli_query($mysqli, "SELECT ID, IsGbsn FROM subtask WHERE Crono='Y' AND IsGbsn='N' AND IDUser='$iduser'")
or die("Não foi possivel executar o pedido.");
}
if(mysqli_num_rows($wasopenresult)==1)
{
$rowwasopen = mysqli_fetch_assoc($wasopenresult);
$result1 = $rowwasopen['ID'];
$result2 = $rowwasopen['IsGbsn'];
echo json_encode(array('userid' => $result1,'gbsn'=> $result2));
header('Content-Type: application/json');
}
?>
“ AJAX”中的“ A”代表异步 。 为了简化您在做什么:
var chronoID;
$.ajax({
// do something asynchronously, which will happen later
});
console.log(chronoID);
也就是说,您正在尝试记录chronoID
之前 ,实际上没有给它一个值。 相反,您想要对该值响应AJAX调用本身。
哪个...您已经在做:
success: function (response) {
// other code which assigns a value to chronoID
console.log(chronoID);
}
因此,基本上,您在这里遇到的是同时尝试正常工作和不正常工作的代码的示例。 基本上,删除不工作的并坚持工作。 您已经有了所需的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.