За последние 24 часа нас посетили 17380 программистов и 1720 роботов. Сейчас ищут 935 программистов ...

Ajax очистка <div перед запросом

Тема в разделе "JavaScript и AJAX", создана пользователем fifofafofi, 13 сен 2010.

  1. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Как можно очистить <div перед запросом...
    Скрипт поисковка... который без нажатия на кнопку сразу выдает результаты поиска... Если быстро вводить текст, то предышущий вывод результата не исчезает... получается, что к предыдущему тксту добавляется новый... Это если быстро вводить текст... Если медленно, то нормально... Как очистить <div перед выводом?
    Пробывал поставить в скрипт на место где плюсики : document.getElementById('search-result') = " "; но тогда скрипт вообще не хочет искать... Подскажите пожалуйста, как решить проблему...



    [js]
    function createObject() {
    var request_type;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
    request_type = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    request_type = new XMLHttpRequest();
    }
    return request_type;
    }

    var http = createObject();

    function searchNameq() {
    searchq = encodeURI(document.getElementById('searchq').value);



    http.open('get', 'in-search.php?name='+searchq);
    http.onreadystatechange = searchNameqReply;
    http.send(null);
    }
    function searchNameqReply() {
    if(http.readyState == 4){
    if (http.status == 200) {
    ++++++++++++++++++++++++++++
    var response = http.responseText;
    document.getElementById('search-result').innerHTML = response;
    }
    }
    }[/js]
     
  2. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    так работает?
    document.getElementById('id').innerHTML = '';
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    innerHTML
     
  4. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Тоже не помогает... Если быстро нажимаю (даже не мовсем быстро, как быстро печатать). то вот что получается... Дублирование результата... Как убрать эту фигню...

    http://s45.radikal.ru/i108/1009/c0/703d38691bfa.bmp
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    setInterval((callback) function, interval)
     
  6. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Подскажи пожалуйста, где это прорисать.. а то я не силен в javascript.... Пасибо)
     
  7. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    fifofafofi
    Отправляй запрос только один раз в определенный интервал времени.
    Функцию для этого я тебе дал. Где прописывать? Там, где приклеен обработчик отправки.
    Не по событию onKeyDown, а по временному отрезку.
    Каждый отрезок освобождает слой с помощью innerText/innerHTML.
     
  8. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Тоесть так?
    <input type="text" id="name" onkeyup="setInterval(searchNameq(), 1000)" >
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    fifofafofi
    Интервал ставится единожды.
    Даю пример, но не гарантирую корректность примера, т.к. проверять времени нет.
    Но алгоритм поймешь:

    [js]document.onload = function() {
    setInterval(function() {
    // Тут делаешь запрос AJAX
    // Значение из поля получаем так
    var fieldValue = document.getElementById("name").value;
    }, 1000);
    }[/js]
     
  10. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    йомайо... чтото туплю)))... а по временному отрезку это как? on что? (пример: onload? или что) ? не могу чтото понять..
     
  11. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Зделал <body onload = "getthis()">

    Потом так... Но не хочет работать...
    [js]
    function getthis() {
    setInterval(function searchNameq() {
    searchq = encodeURI(document.getElementById('searchq').value);
    document.getElementById('search-result').innerHTML = '';
    http.open('get', 'in-search.php?name='+searchq);
    http.onreadystatechange = searchNameqReply;
    http.send(null);
    },2000);
    }[/js]
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Прости, я не синтаксический анализатор =)
    Что именно не работает?
    Напихай алертов построчно, посмотри в консоли ошибок и т.д.
     
  13. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Вообще ничего не работает (поиск)... и алерты не выдают ошибок...
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    fifofafofi
    У меня сегодня нет времени на подробные разъяснения и копания в коде, со слов читай:
    1. При загрузке страницы установить интервал, по которому будет обрабатываться поле ввода
    2. Функция обработки проверяет длину минимально допустимую в этом поле и, если она соответствует допустимой, переходит на шаг 3
    3. На этом шаге мы делаем запрос к серверу и, в случае успеха, заменяем контент на полученный

    Всего 3 шага, кода там практически нет =)
    Где можно оступиться - понять сложно, поэтому сегодня в коде рыться времени нет.
     
  15. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    сделай отдельную функцию и попробуй через setTimeout
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Он и так запутался, давай ему ещё расскажи про рекурсивную установку setTimeout
     
  17. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Консоль ошибок пишет: стоит <body onLoad="getthis()">

    Event thread: load
    Error:
    name: ReferenceError
    message: Statement on line 1: Undefined variable: getthis
    stacktrace: n/a; see opera:config#UserPrefs|Exceptions Have Stacktrace
     
  18. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Appleэм.. я уж пьяный... рули тогда
     
  19. fifofafofi

    fifofafofi Активный пользователь

    С нами с:
    13 сен 2010
    Сообщения:
    23
    Симпатии:
    0
    Ну кто поможет? пожалуйста... очень нужно.