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

时间:2014-02-17 21:03:44

标签: javascript ajax callback global-variables

我想修改函数内的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 }
            })
        }        


    })
})

这是填充表函数:

function getSendingJSON(url,reqObject,callBack)  {
        $.ajax({
            type: "get",
            data: reqObject,
            dataType: "json",
            url: url,
            success: function(response){
               callBack(response);
            }
        });
    }

了解问题是围绕AJAX性质的,为变量分配响应的最简单的解决方法是什么?

0 个答案:

没有答案