我想在JavaScript中實現Repository模式。當我調用Initialize方法時,我想用數據初始化ViewModel。除了我無法從我的AJAX調用返回數據之外,一切似乎都在下降。我可以看到數據從ajax調用返回,但是當我試圖捕獲SomeViewModel的完成函數中的數據時,它是空的。ajax調用不會返回來自外部JS文件的數據
可有人請點我在哪裏,我錯了嗎?
P.S:請注意,我不會使異步調用,因此調用鏈妥善保養。
這是我的倉庫看起來像:
function SomeRepository(){
this.LoadSomeData = function loadData()
{
$.ajax({
type: "POST",
url: "someUrl",
cache: true,
async: false,
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
//success: handleHtml,
success: function(data) {
alert('data received');
return data;
},
error: ajaxFailed
});
function ajaxFailed(xmlRequest) {
alert(xmlRequest.status + ' \n\r ' +
xmlRequest.statusText + '\n\r' +
xmlRequest.responseText);
}
}
};
這是我的視圖模型看起來像:
function SomeViewModel(repository){
var self = this;
var def = $.Deferred();
this.initialize = function() {
var def = $.Deferred();
$.when(repository.LoadSomeData())
.done(function (data) {
def.resolve();
});
return def;
};
}
這是怎麼了我從一個aspx頁面調用:
var viewModel = new SomeViewModel(new SomeRepository());
viewModel.initialize().done(alert('viewmodel initialized'));
alert(viewModel.someProperty);
這確實有效,但同步ajax實際上並不是一個超級好主意。 – Pointy 2012-03-22 15:35:33
謝謝你的回答。我的問題有點不同,但你的回答是有道理的。我會接受它,因爲這是從ajax請求返回數據的一種方式。 – Asdfg 2012-03-23 00:22:48