Что-то вы напридумывали, причём даже не избыточное, а ещё и неработающее.
Для начала вам нужно разобраться с
Promise, о чём уже сказал
Алексей Уколов, а потом почитать про
Deferred Object, раз уж используете
jQuery. Для справки — этот объект создаётся при вызове
ajax() автоматически.
Вы используете в
Deferred Object один и тот же метод
done(), который вызывается только в случае успешного ответа. Вам следует открыть для себя методы
fail(), который вызывается в случае провала, и
always(), который вызывается всегда, независимо от результата.
$.ajax({
url: '...'
}).done(function (data) {
console.log('Успех');
}).fail(function (data) {
console.log('Провал');
}).always(function (data) {
console.log('А мне пофигу');
});
Update: Не ручаюсь за безукоризненность кода. Возможно, использование двух
Deferred не есть гуд.
На скорую руку, примерно вот так (при нескольких обращениях подряд к методу запрос будет всё равно один):
var paramPamPam = {
data: null,
defer: $.Deferred(),
get: function () {
if (this.data) {
this.defer.resolve(this.data);
} else {
if (!this.transport) {
this.transport = $.ajax({
url: '...',
type: 'post'
});
}
this.transport
.done(this.enable.bind(this))
.fail(this.disable.bind(this))
.always(function () {
delete this.transport;
}.bind(this));
};
return this.defer.promise();
},
enable: function (data) {
this.data = data;
this.defer.resolve(data);
},
disable: function () {
this.defer.resolve();
}
}
paramPamPam.get().then(function (data) {
console.log(data);
});
paramPamPam.get().then(function (data) {
console.log(data);
});