【发布时间】:2014-09-28 22:24:28
【问题描述】:
我在与范围相关的代码中遇到了一些困难。 这是我的代码:
<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() 函数中使用带有窗口的“上下文”选项,但也不起作用:(
【问题讨论】:
-
为什么第三个 console.log 会等待你的 POST 完成?它在 obterDadosCategorias() 之后立即运行,它没有任何时间来触发 POST 请求、获取响应、解析正文并重新分配
obterDadosCategorias的内容 -
当我阅读这篇文章时,我希望它是 'object{etc}'、'object{etc}'、'string(11) it works')。这既不是它的样子,也不是海报所期望的
-
您不了解“异步”的含义(AJAX 中的 A)。尝试将唯一标识符放入您的 console.log 调用中(例如,console.log(1, dadosCategorias))以查看它们被调用的顺序。
-
你们是对的。我将尝试发出同步请求。 (以及用于识别 console.log 调用提示的坦克)
标签: javascript jquery scope