我有一个对象的构造函数:使用jQuery AJAX调用来填充动态对象
function Context(tid) {
this.tid = tid;
var self = this;
//We get all the data we need from the server to use in this Context.
$.post(
'/review/context/get_context',
{tid: tid},
function(data) {
results = $.parseJSON(data);
if(results.status == "SUCCESS") {
self.obj = results.object;
self.currenttodo = results.tid
}
}
);
}
我想发起一个文档加载,并使用该对象,直到和事件触发要改变的对象,在这一点上,我想擦除该对象,并用来自不同Ajax调用的信息重新启动它。在这里使用一个对象是可取的,因为有一大堆适用于所有上下文的函数。
$(document).ready(function() {
cc = new Context($('#context-tabs').attr('name'));
console.log(cc);
console.log(cc.currenttodo);
}
生成以下控制台输出:
Context
currenttodo: 14
obj: Object
tid: "1"
__proto__: Context
undefined
我觉得这是这个是不是后续功能的执行之前完成asynchonous函数的标准情况下,但我有几个问题:
1)为什么我可以直接在console.log之前直接在console.log中查看cc.currenttodo的值,但无法访问它? 2)为什么Chrome console.log输出对于两个整数不同。 14不是引号和蓝色,而tid:“1”是红色的并用引号引起来。我认为这表明tid是一个字符串,但我想确认一下。 3)如果我不能以这种方式使用异步调用,我将实例化一个唯一对象,以用于从服务器调用填充的调用$ document.ready()函数中?我认为我需要通过成功:函数来完成它,但似乎无法获得除self.variables之外的任何内容吗?
在此先感谢。
UPDATE:SO不会让我回答我自己的问题呢,所以这里是工作代码:
function Context(tid) {
this.tid = tid;
var self = this;
//We get all the data we need from the server to use in this Context.
$.ajax({
url: "/review/context/get_context",
type: "POST",
data: "tid="+self.tid,
async: false,
dataType: "json",
success: function(data) {
if(data.status == "SUCCESS") {
self.obj = data.object;
self.currenttodo = data.tid;
}
}
});
}
内调出一个实例化对象在似乎不可能得到的结果这种情况下,异步通过成功函数回调到实例化对象的范围,但设置async:false有效。我确实需要将jQuery的$ .post调用转换为$ .ajax,但这没什么大不了的: – samtresler 2012-01-03 18:43:40