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

时间:2017-07-17 16:42:52

标签: javascript php jquery json ajax

我有一个关于PHP变量通过AJAX / JSON转移到JavaScript的问题。

我希望var ChronoID在页面加载时使用从AJAX获取的值从PHP代码更新。即使它在AJAX中工作正常,它也会回到 undefined 并且不会更新变量以供以后使用。

我做错了什么以及将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'); 
    }
    ?>

1 个答案:

答案 0 :(得分:1)

“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);
}

所以基本上你所拥有的是工作代码和非工作代码试图做同样事情的同时例子。基本上,取下不工作的一个并坚持工作。您已经拥有了所需的代码。