문제

나는 사용 중입니다 jQuery.autocomplete (1.02) 내 검색 상자에서 원합니다 정확한 문자열 및 하위 문자열 일치. 나는 데이터베이스로드에 대해 신경 쓰지 않습니다 (아직!), 나는 모든 키 스트로크를 쿼리하고 캐싱을 완전히 우회하는 것을 기쁘게 생각합니다. 나는 놓친 것을 원하지 않습니다.

이를 위해 나는 설정을 시도했다 캐시 틀 길이 = 1, 최소 허용이지만 자동 완성 함수는 각 키에 대한 GET 요청을 해제하는 것을 거부합니다.

searchbox          GET_request

   'a'       ->    http://localhost/service_search_request?q=a
   'ar'      ->    http://localhost/service_search_request?q=ar
   'ars'     ->    http://localhost/service_search_request?q=ars

대신, 그것은 첫 번째와 세 번째를 보내고 두 번째를 놓치고 'AR'에 대한 잘못된 결과를 제공합니다.-/ 캐시와 세션을 지우 셨지만 어떤 종류의 캐싱이 여전히 진행되고있는 것처럼 보입니다. Afaik 나는 프록시가 진행되지 않으며 매번 교대 근거가 있습니다. 그러면이 동작은 jQuery.autocomplete 자체에서 나온 것 같습니다.

그래서 내 질문은 ...

ㅏ) 이것이 가능성이 있습니까? 즉, 기능입니까, 아니면 버그입니까?

비) 그렇다면 그 주위에 깨끗한 방법이 있습니까? ...

씨) 그렇지 않다면 대신 어떤 자동 완성을 사용 하시겠습니까?

당연히 D) 아니요 당신은 단지 그것을 잘못 사용하고 있습니다. 항상 가능성이 있으며, 실제로이 길을 따라 가기 위해 시간을 보낸 선호는 내가 찾거나 읽지 못한 문서에 대한 링크가 있다고 가정합니다!

건배,

로저 :)

도움이 되었습니까?

해결책

왜 그런지 궁금합니다 캐시 길이 작동하지 않지만 자동 완성에도 문제가있었습니다. IMHO, 오류가 있습니다. 그러나, 옵션 목록, 이있다 matchsubset 당신은 거짓으로 설정할 수 있습니다.

편집하다:335 행 주변 어딘가에 "요청"이라는 기능이 있습니다. 디버그 메시지를 추가하여 어떤 일이 발생하는지 확인할 수 있습니다. (참고 : 필요합니다. 개똥 벌레 설치 또는 "콘솔"은 알 수 없습니다)

function request(term, success, failure) {

    console.debug("ac request...");

    if (!options.matchCase)
        term = term.toLowerCase();

    var data = cache.load(term);

    console.debug("ac request 1, loaded data from cache: " + data + " term: " + term);

    // recieve the cached data
    if (data && data.length) {
        success(term, data);
    // if an AJAX url has been supplied, try loading the data now
    } else if( (typeof options.url == "string") && (options.url.length > 0) ){

        console.debug("ac request 2, data is not in the cache, request it");

"FlushCache"는 옵션으로 첨부 / 설정할 수있는 기능에서 쉽게 사용할 수 있습니다. 백엔드에 더 많은 데이터가있을 수 있다면 캐시를 지우는 데 이것을 사용했습니다.

formatItem: function (data,i,n,value){
    if(i === (this.max -1)){
        console.debug("flushCache");
        jQuery(this).flushCache();
    }

    return data[1] + " (" + data[0] + ")";
}

다른 팁

나는 같은 문제가 있습니다. 캐싱은 옵션 캐시 길이를 1로 설정했지만 작동하지 않습니다.

인쇄 된 각 용어 후에 FlushCache 기능을 호출하는 솔루션을 사용하여 작동합니다. 나는 그것을 사용할 수 없었다 :

if(i === (this.max -1)){

필터링 후 'I'가 예를 들어 1 이었지만 'this.max'는 원래 백엔드 쿼리로 25 개의 반환 행을 초래 한 25 개입니다.

하지만,이 버그 스웨덴 캐릭터 'Å', 'ä'또는 'Ö'가 포함 된 단어를 입력 할 때 나타납니다. 아마도 현금은 예상대로 작동하지만이 특수 인물은 아닙니다.

그래도. 저를위한 해결책은 항상 FlushCache Control을 FormateM () 함수로 호출하는 것이 었습니다.

function formatItem(row, position, n, term) {

    if($("#keywords-h").length > 0){
        $("#keywords-h").flushCache();
        }

        // format Item
        return "<span>" + row[0] + "</span>";
}

이것이 누군가를 돕고 누군가가 특수 캐릭터와 같은 문제를 겪고 있다면 답장을 게시하십시오.

분명히 18 개월이 지났지 만

캐시 길이 : 0

옵션에서 나에게 효과가있었습니다. 그래서 최신 릴리스가 버그를 수정했을까요?

이것은 나를 위해 효과가있었습니다.

function requestData(q) {
   if (!options.matchCase) q = q.toLowerCase();

   //-- I turned off this line
   // var data = options.cacheLength ? loadFromCache(q) : null;

   //-- And added this line of code
   var data = null;

예를 들어 서브 세트 매칭을 비활성화하는 옵션이 있습니다

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top