我的代码面临一些与范围相关的困难。 这是我的代码:
<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/