繁体   English   中英

AJAX GET在页面加载时未更新Javascript变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM