我正在使用Knockout jQuery和Require在Durandal开发SPA。我的问题是,当我对API进行Ajax调用时,实际上并没有在.then语句之外获取数据(当我用下面注释的行替换Get方法时)。但是,如果我使用当前的调用,则无法使用.then,它给我一个类型未定义的错误。我看过Durandal,他们解释了有关使用Q的问题,我在我的主要文章中有引用。不确定here中提到的补丁

    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
        };

最佳答案

如果您让getSearchResult兑现承诺怎么办?

var getSearchResult = function (dataHolder,text) {
        //return $.getJSON('/Api/Data/GetSearchItem/' + text).done();
        jQuery.support.cors = true;
        return $.ajax({
            url: '/Api/Data/GetItem/' + text,
            type: 'GET',
            dataType: 'json'
        }).then(function(data) {
            dataHolder(data);
            var check = dataHolder();
            return dataHolder();
        });
    };


然后也让search返回一些承诺:

    var search = function (searchText) {
        return dtx.getSearchResult(searchResult, searchText).then(function (data) {//(searchResult is an observableArray
            searchFlag(true);
            var test = searchResult();//i get data here
            searchTxt(searchText);
        });
    };


现在,您可以按以下方式调用search

search(searchText).then(function(data) {

});

关于jquery - .then .done promise 无法使用 knockout 和js在durandal spa中工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28426258/

10-12 12:28
查看更多