вопрос ajax для автоматического предложения и выпадающего - PullRequest
2 голосов
/ 02 ноября 2010

Пожалуйста, перейдите сюда - http://auspost.com.au/apps/postcode.html

, когда я набираю 314, происходит вызов ajax, когда я набираю 5 после него, затем снова запускается другой вызов, но когда я удаляю 5, то никакой вызов не вызываетсяно все еще показывает данные.

Как они это делают?Пожалуйста, помогите мне, поскольку я новичок в этой концепции

Ответы [ 4 ]

1 голос
/ 02 ноября 2010

Похоже, что они хранят данные, используя функцию JQuery $ .data ().Вот что я нашел в их файле webapps.js:

var a=$(this);$(a).data("hintText","Enter suburb or postcode");
if($(a).attr("value")==""){$(a).val($(a).data("hintText")).addClass("ac_hint")}$(a).focusin(function(){
if($(a).val()==$(this).data("hintText")){$(a).val("");$(a).removeClass("ac_hint")}}).focusout(function(){
if($.trim($(a).val())==""){$(a).val($(a).data("hintText"));$(a).addClass("ac_hint")}})})}
//...

Проверьте файл самостоятельно, если хотите узнать подробности.

1 голос
/ 02 ноября 2010

Использование jQuery:

 $(function() {
      inputField = $('#inputfield');

      inputField.keyup(function() {
         if (inputField.val().length >= 3){
            // do you ajaxcall here
         }
         else {
           // do nothing - inputlength isn't at least three
         }
      });
   });

Хотя, похоже, что Australia Post просто использует автозаполнение jQuery UI с помощью minChars 3. Подробнее об автозаполнении jQuery ui можно прочитать здесь http://docs.jquery.com/UI/Autocomplete.

Вы также можете попробовать это сообщение: jQuery UI Autocomplete и результаты запросов кеширования http://developwithstyle.com/articles/2010/05/14/jquery-ui-autocomplete-is-it-any-good.html

На самом деле вы найдете хороший справочник на http://deathofagremmie.com/2010/04/03/jquery-ui-autocomplete-widget-caching/, который, вероятно, делает то, что вы хотите.

0 голосов
/ 02 ноября 2010

Соответствующий код находится в webapp.js

Автозаполнение вызывается в основном обычным способом, но функция автозаполнения позже расширяется для выполнения дополнительной обработки

function init_apps_autocomplete() {
    $(".fn_autocomplete").each(function () {var a = 207;if ($(this).parents("#module_iWantTo").length > 0 || $(this).parents("#modal_iWantTo").length > 0) {a = 182;}$(this).autocomplete(API_AUTOCOMPLETE, {minChars: 3, width: a, matchContains: false, autoFill: false, captureUsage: true, formatItem: function (d, c, b) {return d[2] + (" " + d[3] + " " + d[1]);}, formatMatch: function (d, c, b) {return d[2] + (" " + d[1]);}, formatResult: function (b) {return b[2] + (" " + b[1]);}, onSelection: function () {$(".fn_autocomplete").parents("form").find("select option:first").attr("selected", true);}, max: 10});});
    ...
}

Кэширование достигается путем расширения функции автозаполнения следующим образом:

(function (a) {a.fn.extend({autocomplete: function (b, c) {.....}});}(jQuery));

Внутри этого jQuery.fn.extend() затем выполняется отдельный jQuery.extend() для создания нового объекта автозаполнения в jQuery.Этот объект содержит много дополнительной обработки, включая некоторое управление кешем, которое, скорее всего, то, что вы ищете.

Код был минимизирован до такой степени, что за ним трудно следовать, и я не работалточно, каким образом выполняется этот процесс кеширования, но, надеюсь, это даст вам старт.

0 голосов
/ 02 ноября 2010

Один простой способ - узнать, является ли новое значение префиксом предыдущего значения. После небольшой игры, я думаю, что это может просто кэшировать определенное количество полученных результатов. Но это только предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...