试图覆盖全局变量时出现jQuery.post()作用域问题
jQuery.post() scope issue while trying to overwrite global variable
我在代码中遇到了一些与范围有关的困难。这是我的代码:
<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()函数中使用window的"context"选项,但不起作用:(
感谢大家的评论!: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);
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- jquery.post和变量作用域
- 无法在 $.post 回调中设置作用域变量
- ajax GET 和 POST 中的变量作用域
- JavaScript 中的范围(为什么在 $.post() 方法数组的作用域是本地的?)
- 试图覆盖全局变量时出现jQuery.post()作用域问题
- 作用域变量在REST API POST请求中丢失值
- http.post().success()将变量传递给success()匿名函数作用域问题
- AngularJS - POST请求中this与$作用域的使用