在函数外部访问JS / jQuery变量

时间:2017-07-30 04:16:15

标签: javascript jquery scope

我试图在函数内声明一个变量,并希望在该函数之外使其可用。我已经经历了几个Stackoverflow的答案,但仍然无法弄清楚。

script>
    (function() {
        var url
        $("#airline-select").change(function () {
            url = "{% url 'airline_year_financial_data' %}";
        });
        console.log(url)
    var httpRequest;
    makeRequest();

    // create and send an XHR request
    function makeRequest() {
        httpRequest = new XMLHttpRequest();
        httpRequest.onreadystatechange = responseMethod;
        httpRequest.open('GET', url)
        httpRequest.send()
    }
    // Handle XHR Response
    function responseMethod () {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                updateUISuccess(httpRequest.responseText)
                } else {
                    // Do something
                }
        }
    }
    // Handle XHR Success
    function updateUISuccess(responseText) {
        var response = JSON.parse(responseText)
        var a = $("#airline-select").val();

        var width = 500;
        var height = 300;
        var padding = 20;
        d3.select("body")
            .append("svg")
                .attr("class", "waterfall-container")
                .attr("width", width)
                .attr("height", height)
                .attr("style", "outline: thin solid")
        d3.select("svg")
            .selectAll("rect")
            .data(response)
            .enter()
            .append("rect")
                .attr("x-axis", 200)
                .attr("y-axis", 300)
                .attr("width", 20)
                .attr("height", 200)
                .attr("fill", "blue")
    }

})();

</script>

它记录了未定义的&#39;在控制台上,这意味着函数内部的url值正在更新或在函数外部不可用。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

如果您希望在$加载jQuery()时调用.ready()的{​​{1}}别名,则在您立即调用函数表达式之前缺少document DOM#airline-select中定义为HTML。

您可以通过在函数声明中定义预期参数,将document传递给url事件处理程序中的makeRequest()

change