Остановка запроса AJAX, не зная, какой - PullRequest
0 голосов
/ 17 ноября 2011

Я использую компонент автозаполнения простых лиц.Теперь, что это делает, вы добавляете несколько символов, и он будет искать имена соответственно.Теперь проблема в том, что у меня есть кнопка «Ввод» (на клавиатуре) ... Поскольку я хочу, чтобы ввод был функциональным, даже если вы ищете автозаполнение, вы все равно можете нажать его и продолжить, чтобы получить больший список.Теперь это делается с помощью кнопки, которая переходит в Webflow и перенаправляет на другую страницу.

Теперь у меня проблема в том, что, если автозаполнение начинает поиск, он запускает Ajax-запрос, и если я нажимаю Enter, он запускает другой запрос на перенаправление.Но здесь есть одна загвоздка: первый запрос все еще активен, и если он возвращает успех до завершения моего перенаправления, он просто прерывает перенаправление, давая мне страницу, с которой он начался.

Теперь главный вопрос: как мне остановить первый запрос, о котором я ничего не знаю?Мудрый Blackbox, я не знаю много о запросе за исключением того, что это очень раздражает.Я также не могу передать его через JavaScript, потому что у автозаполнения есть только функция при запуске, которая загружается до запроса, и при завершении, которая загружается после запроса.

Редактировать : Вот кодЯ использую на тот случай, если вам нужно, чтобы понять:

XHTML и JavaScript:

<p:autoComplete  value="#{simpleSearchBean.searchString}" completeMethod="#   {simpleSearchBean.completeUser}"
var="user" itemLabel="#{user}" itemValue="#{user}" forceSelection="false"
minQueryLength="3" maxResults="10" name="search_block_form" id="edit-search-block-form-1" size="30" queryDelay="500" style="float:left;">
     <p:ajax event="itemSelect" oncomplete="autoClickSearchButton()" update="@all"/>
</p:autoComplete>

<p:commandButton action="simpleUserSearch" title="#{msgs_common['common.search']}" name="op" id="edit-submit" image="ui-icon ui-icon-search" style="float:left;"/>

<script type="text/javascript">
function autoClickSearchButton(){
    jQuery('#search-block-form\\:edit-submit').click();
}

jQuery('#search-block-form\\:edit-search-block-form-1').keyup(function(event){
    if(event.keyCode == 13){
        jQuery('#search-block-form\\:edit-submit').click();
    }
});
</script>   

А вот фрагмент веб-потока:

<end-state id="simpleUserSearch" view="flowRedirect:user?searchString=#{simpleSearchBean.searchString}"/>

<global-transitions>
    <transition on="simpleUserSearch" to="simpleUserSearch" validate="false"/>
</global-transitions>

Ответы [ 2 ]

0 голосов
/ 18 ноября 2011

Я не думаю, что вам даже нужна функция для прослушивания, если пользователь нажимает enter ... автозаполнение уже делает это ... Если вы хотите, чтобы search commandButton перенаправлял на другую страницу, просто установите ajax attribute to false:

<p:commandButton ajax='false' action="simpleUserSearch" title="#{msgs_common['common.search']}" name="op" id="edit-submit" image="ui-icon ui-icon-search" style="float:left;"/>
0 голосов
/ 17 ноября 2011

У меня была та же проблема, лучший способ решить эту проблему будет выглядеть примерно так:

var ajaxObject = $.ajax( {your code here} );

при отправке сделайте это:

ajaxObject.abort();

Это остановит ваш скрипт ajax.

...