我使用SignalR建立一个搜索引擎,实时向客户提供部分回复。
第一次搜索未结束时会出现问题,客户端会修改文本框的值(txtTab)并再次单击按钮(btnSearch)。两个查询的结果是混合的,因为服务器保留了两个并发执行。
我需要在客户点击搜索按钮时取消上一次执行。
尝试使用hub.stop()和hub.disconnect(),但我不能。
抱歉,我的英文不好:)
var busca = $.connection.hubBusca;
busca.client.atualizaResultados = function (arr) {
oTable.fnAddData(arr);
};
$.connection.hub.start().done(function () {
$('#btnSearch').click(function () {
if ($('#txtTab').val() != '') {
busca.server.iniciar($('#txtTab').val());
}
});
});
谢谢! 路易斯费尔南多
答案 0 :(得分:0)
我建议创建一个额外的服务器和客户端方法来处理最终搜索(在点击#btnSearch时会发生这种情况)。
而不是调用busca.server.iniciar
来调用类似busca.server.terminar
的内容。
我还建议在调用busca.server.terminar
之前设置某种布尔标志以禁用busca.client.atualizaResultados
,这样初步搜索结果就不会影响最终的搜索结果。
然后在HubBusca.Terminar
中,您可以拨打Clients.Caller.finalesResultados
,这与Clients.Caller.atualizaResultados
不同,不会被禁用。
通过这种方式,您可以确保发送到finalesResultados
方法的最终搜索结果不会被发送到atualizaResultados
客户端方法的结果替换。
抱歉我的西班牙方法名称不好。我使用谷歌翻译。