我试图在我的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!");
}
}
}
答案 0 :(得分:1)
你的搜索方法没有返回任何内容,所以它的未定义并不奇怪。您需要更改为Task<T>
并返回
此外,我看不到您订阅了results
或noResults
?像
search.client.results = function(result) {
console.log(result);
};
编辑:使用SIgnalR也很奇怪,带请求/响应的标准REST应该没关系