为什么我的全局变量没有在JavaScript回调函数中修改

为什么我的全局变量没有在JavaScript回调函数中修改,javascript,ajax,callback,global-variables,Javascript,Ajax,Callback,Global Variables,我想在一个函数中修改json对象,然后在另一个函数中使用接收到的值。以下是我编写的代码: $(document).ready(function () { var json $("#ok").click(function(){ function plotReglaFalsa(respuesta) { json = respuesta } .... .... plotReg

我想在一个函数中修改
json
对象,然后在另一个函数中使用接收到的值。以下是我编写的代码:

$(document).ready(function () {

    var json

    $("#ok").click(function(){

        function plotReglaFalsa(respuesta) {
            json = respuesta
        }

        ....
        ....
        plotReglaFalsa(anyJSON)

        function populateTable () {
            console.log(json)
        }

        populateTable()

    })
但是json并没有被修改,我会调用所需的函数来修改json,并且
console.log
语句打印未定义的内容。我也知道respuesta是一个有效的对象

但是,
plotReglaFalsa
实际上是AJAX请求中的回调参数,这是我的完整代码:

$(document).ready(function () {

    var json

    $.plot($("#placeholder"), [ [] ], { yaxis: { show: true, max: 100, min: -100 }, xaxis: { show: true, max: 100, min: -100} });

    $("#ok").click(function(){

        var args = {    algorithm: 'ReglaFalsa.py',
                        parameters: "\'"+$("#fx").val()  + "\' "  +
                                    $("#a").val()   + " "   +
                                    $("#b").val()   + " "   +
                                    $("#tolerancia").val() + " " +
                                    $("#iteracionesMaximas").val()
                    }

        function plotReglaFalsa(respuesta) {

            json = respuesta
            var result = []
            for (var series in respuesta) {

                if (series!="x" && series != "y")      
                result.push({    
                    data : [ [respuesta[series].a,respuesta[series].F], [respuesta[series].b, respuesta[series].G]]
                })
            }

            result.push({
            label: "fx",
            color: "#FB2365",
            data: _.zip(respuesta['x'], respuesta['y'])
            })


            var plot = $.plot(  $("#placeholder"), 
                                result, 
                                {   selection:{mode: "xy"},  
                                    zoom: { interactive: true }, 
                                    pan: { interactive: true }, 
                                    grid: { markings: [{ xaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 1 }, { yaxis: { from: 0.0, to: 0.0 }, color: 'black', lineWidth: 1 }] }
                                })
            plot.getOptions().selection.mode = null
        }

        getSendingJSON("/plot",args,plotReglaFalsa)
        populateTable()

        function populateTable () {
            console.log(json)
            $("body").append("<table id='resultados' class='table table-bordered'><thead><th>i</th><th>a</th><th>F</th><th>b</th><th>G</th><th>w</th></thead><tbody></tbody></table>")

            $('#resultados').dynatable({

                features: {
                    paginate: false,
                    sort: false,
                    search: false,
                    perPageSelect: false,
                    recordCount: false
                },
                dataset: { records: json }
            })
        }        


    })
})

了解到问题的本质是AJAX,将响应分配给变量最简单的解决方法是什么?

您从未将
json
设置为此代码中的任何内容。这里的任何代码都没有引用
json
变量。你想在哪里修改它的值?这个方法中有AJAX吗?记住,AJAX是异步的。
getSendingJSON()
做什么?你能给我看一下代码吗?如果有AJAX,那么需要从callback.Yep内部调用
populateTable()
。这就是问题所在。您需要从回调内部调用
populateTable()
(在本例中是
plotReglaFalsa()
)。调用
populateTable()
时,AJAX调用尚未完成,因此尚未设置
json
function getSendingJSON(url,reqObject,callBack)  {
        $.ajax({
            type: "get",
            data: reqObject,
            dataType: "json",
            url: url,
            success: function(response){
               callBack(response);
            }
        });
    }