使用Typeahead和SignalR

时间:2015-05-31 14:07:01

标签: javascript c# asp.net-mvc signalr typeahead.js

我试图在我的SignalR实现中使用Typeahead。 发生的事情是我的Hub受到了攻击并返回了值,但result之后的.done()undifined。我无法理解为什么?

的Javascript

$(function () {

    var search = $.connection.searchHub;
    $.connection.hub.start().done(function () {

        $('#searchBar').typeahead(null, {
            minLength: 2,

            // begin source      
            source: function (query, process) {
                var suggestions = [];// my callback value


                search.server.search(query)
                        .done(function (result) {
                            console.log(result);
                            $.each(result, function () {
                                console.log(result);
                                suggestions.push(this);
                                process(suggestions);//process is a callback method
                            });
                        }).fail(function (error) {
                            console.log(error);
                            process([]);//process is a callback method, don't know if this is necessary here, but will produce no suggestions
                        });
            }
        });

    });

集线器:

[HubName("searchHub")]
    public class SearchHub : Hub
    {
        public async Task Search(string query)
        {
            api = new MovieApi();
            var result = await api.Search(query);

            if (result.results != null)
            {
                Clients.Client(Context.ConnectionId).results(result.results[0].title);
            }
            else
            {
                Clients.Client(Context.ConnectionId).noResults("There are no search results!");
            }

        }
    }

1 个答案:

答案 0 :(得分:1)

你的搜索方法没有返回任何内容,所以它的未定义并不奇怪。您需要更改为Task<T>并返回

此外,我看不到您订阅了resultsnoResults?像

search.client.results = function(result) {
   console.log(result);
};

编辑:使用SIgnalR也很奇怪,带请求/响应的标准REST应该没关系