javascript - 在函数外访问 JS/jQuery 变量

标签 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>

它在控制台上记录“未定义”,这意味着函数内的 url 值正在更新或在函数外不可用。我该怎么做?

最佳答案

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

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

$(function() {

    var httpRequst, url;

    $("#airline-select").change(function () {
      url = "{% url 'airline_year_financial_data' %}";
      makeRequest(url)
    });

    // create and send an XHR request
    function makeRequest(url) { // include `url` parameter at function
        httpRequest = new XMLHttpRequest();
        httpRequest.onreadystatechange = responseMethod;
        httpRequest.open('GET', url)
        httpRequest.send()
    }
    //
})

关于javascript - 在函数外访问 JS/jQuery 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45396312/

相关文章:

jquery - AJAX简单解释

javascript - 需要帮助理解 Javascript 中的(词法)变量范围

javascript - Chrome 扩展中的 Require.JS : define is not defined

javascript - 使用 AJAX/jQuery 将内容加载到 div

javascript - 物化设计中的全屏模式

javascript - 如何: MS Bot directline messaging using a websocket

javascript - 从旧的外部 Javascript 更改 React 组件的状态?

javascript - JQuery 中带参数的重定向操作

python - 为什么 Python 在销毁对象之前销毁类变量?

javascript split() 数组包含