У меня есть конструктор объекта:
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
Я думаю, что это стандартный случай, когда асинхронная функция не была завершена до выполнения следующей функции, но у меня есть несколько вопросов:
1) Почему я могу увидеть значение cc.currenttodo в console.log непосредственно перед console.log, где я не могу получить к нему доступ?
2) Почему вывод Chrome console.log отличается для двух целых чисел. 14 не в кавычках и синий, а tid: «1» красный и в кавычках. Я предполагаю, что это означает, что tid является строкой, но я хочу это подтвердить.
3) Как, если я не могу использовать асинхронные вызовы таким образом, я бы создал уникальный объект для использования в вызывающей функции $ document.ready (), заполненной из вызова сервера? Я бы подумал, что мне нужно будет сделать это через success: function, но, похоже, не могу получить ничего, кроме self.variables оттуда?
Заранее спасибо.
ОБНОВЛЕНИЕ: ТАК не позволяет мне отвечать на мои собственные вопросы, поэтому вот рабочий код:
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;
}
}
});
}