javascript - 尝试覆盖全局变量时出现 jQuery.post() 范围问题

标签 javascript jquery scope

我的代码面临一些与范围相关的困难。 这是我的代码:

<script type="text/javascript">
    var totalHoras = {};
    var dadosCategorias = {"teste": "1234"};
    var t; // timeout handler para exibição de feedback para o usuário

    $().ready(function() {
        // obtém dados das categorias
        var obterDadosCategorias = function() {
            $.post(
                "{{ baseRoute }}/cadastro/categoria/listar"
                , {
                    "ajax": "true"
                }
            ).done(function(data) {
                var obj = $.parseJSON(data);
                if (obj.result) {
                    console.log(dadosCategorias); // returns 'object{"teste": "1234"}'
                    dadosCategorias = obj.data;
                    console.log(dadosCategorias); // returns 'string(11) "it works!!!"'
                } else {
                    alert('Erro interno: não foi possível obter os dados das categorias');
                }
            });
        };

        obterDadosCategorias();
        console.log(dadosCategorias); // returns 'object{"teste": "1234"}'

问题是:为什么第三次调用 console.log 会返回原始的 var 值?是不是应该被覆盖?

控制台应该是

'object{"teste": "1234"}'
'string(11) "it works!!!"'
'string(11) "it works!!!"'

但是确实如此

'object{"teste": "1234"}'
'string(11) "it works!!!"'
'object{"teste": "1234"}'

我尝试在 $.ajax() 函数中使用带有窗口的“上下文”选项,但也不起作用:(

最佳答案

感谢各位的评论! :D

我已经找到答案了。问题根本不在于范围。实际上,对 console.log() 的调用并不按照脚本的顺序进行。之前的调用顺序是312,现在是123:D 我将 ajax 方法更改为 $.ajax() 而不是 $.post() 并将选项“async”设置为 false 以实现此目的,如下所示:

<script type="text/javascript">
    var totalHoras = {};
    var dadosCategorias = {"teste": "1234"};
    var t; // timeout handler para exibição de feedback para o usuário

    $().ready(function() {
        // obtém dados das categorias
        var obterDadosCategorias = function() {
            $.ajax(
                "{{ baseRoute }}/cadastro/categoria/listar"
                , {
                    "type": "POST"
                    , "async": false
                    , "data": {
                        "ajax": "true"
                    }
                }
            ).done(function(data) {
                var obj = $.parseJSON(data);
                if (obj.result) {
                    console.log(1, dadosCategorias);
                    dadosCategorias = obj.data;
                    console.log(2, dadosCategorias);
                } else {
                    alert('Erro interno: não foi possível obter os dados das categorias');
                }
            });
        };

        obterDadosCategorias();
        console.log(3, dadosCategorias);

关于javascript - 尝试覆盖全局变量时出现 jQuery.post() 范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090272/

相关文章:

javascript - formData - AJAX - PHP - 上传多个文件

php - JQuery - 组复选框

javascript - 为什么 undefined var 没有添加到 window 对象 JavaScript 中?

javascript - 使用 Javascript Promise,如何关闭 `then` 中父作用域的局部变量?

javascript - 实例 stub 方法

javascript - 如何从客户端清除/设置具有 Ajax Control Toolkit HTML Editor Extender 的 Asp.Net TextBox 的值?

javascript - 当我拖动一个用css旋转过的图像时,它会以非旋转方式拖动(原始)?

javascript - 如何将外部 Javascript 库加载到 Angular 4 组件中

javascript - react |更新部分对象并设置状态

c++ - 错误 : ‘screen’ was not declared in this scope