我正在使用Knockout jQuery和Require在Durandal开发SPA。我的问题是,当我对我的API进行ajax调用时,实际上并没有在.then语句之外获得我的数据(当我将Get方法替换为下面注释的行时)。但是,如果我与当前的电话工作,我不能使用。然后它给了我一个类型未定义的错误。我已经看过杜兰达尔,他们解释了如何使用Q,我拥有它并在我的主要内容中引用。不知道的补丁提到here。然后.done承诺不适用于使用淘汰赛和js的durandal spa
var getSearchResult = function (dataHolder,text) {
//return $.getJSON('/Api/Data/GetSearchItem/' + text).done();
jQuery.support.cors = true;
$.ajax({
url: '/Api/Data/GetItem/' + text,
type: 'GET',
dataType: 'json',
success: function (data) {
dataHolder(data);
var check = dataHolder();
return dataHolder();
},
error: function (e) {
}
});
};
我打电话,像这样的方法:
var search = function (searchText) {
dtx.getSearchResult(searchResult, searchText).then(function() {//(searchResult is an observableArray
searchFlag(true);
var test = searchResult();//i get data here
searchTxt(searchText);
});
var test1 = searchResult();//no data here
};
BTW,设置'dataType'选项是多余的,所以Ajax调用可以折叠为'.get('/ Api/Data/GetItem /'+ text)'。但必须注意'text'是URL编码正确的。不编码它是一个错误。 – Tomalak 2015-02-10 08:26:56
哦,还有一点,因为knockout observables是函数,它们可以直接用作回调:'search(searchText).done(targetObservable)'。 – Tomalak 2015-02-10 08:43:13
这为我工作和@Jan Hommes下面的答案也是有帮助的。非常感谢您的提示 – mboko 2015-02-10 08:57:41