Ajax Live Search - получите 2 поля вместо 1 - PullRequest
5 голосов
/ 07 февраля 2011

У меня небольшая проблема, я хочу живой поиск, который возвращает мне POST_TITLE и POST_ID. заголовок предназначен для людей, но моя главная причина в том, что я хочу, чтобы POST_ID работал с ним.

Может кто-нибудь мне помочь, я выложил код ниже ...

   <script>
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
    }
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
    if (searchReq.readyState == 4 || searchReq.readyState == 0) {
        var str = escape(document.getElementById('txtSearch').value);
        searchReq.open("GET", '/wp-content/themes/twentyten/livesearch.php?search=' + str, true);
        searchReq.onreadystatechange = handleSearchSuggest;
        searchReq.send(null);
    }        
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
    if (searchReq.readyState == 4) {


           var sx = document.getElementById('restaurantid')
        sx.innerHTML = '';

        var ss = document.getElementById('search_suggest')
        ss.innerHTML = '';
        var str = searchReq.responseText.split("\n");
        for(i=0; i < str.length - 1; i++) {
            //Build our element string.  This is cleaner using the DOM, but
            //IE doesn't support dynamically added attributes.
            var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
            suggest += 'onmouseout="javascript:suggestOut(this);" ';
            suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
            suggest += 'class="suggest_link">' + str[i] + '</div>';
            ss.innerHTML += suggest;
            ss
        }
    }
}

//Mouse over function
function suggestOver(div_value) {
    div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
    div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
    document.getElementById('txtSearch').value = value;
    document.getElementById('restaurantid').value = value;
    document.getElementById('search_suggest').innerHTML = '';
}
</script>


<form id="frmSearch" action="">
    <input type="text" id="restaurantid" name="restaurantid" style="display: none;" />
                    <input type="text" id="txtSearch" name="txtSearch" alt="Search Criteria" onkeyup="searchSuggest();" autocomplete="off" />
                    <input type="submit" id="cmdSearch" name="cmdSearch" value="Search" alt="Run Search" />
                    <div id="search_suggest"></div>
                </form>
</code>

livesearch.php - THE AJAX PAGE

<code>
<?php

$con = mysql_connect('x', 'x', 'x);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("xx", $con);
if (isset($_GET['search']) && $_GET['search'] != '') {
    //Add slashes to any quotes to avoid SQL problems.
    $search = addslashes($_GET['search']);
    //Get every page title for the site.
    $suggest_query = mysql_query('SELECT * FROM `mrr_posts` WHERE `post_title` LIKE \'%'.$search.'%\' AND `post_status` LIKE \'publish\' LIMIT 0, 30') or trigger_error("Query: $suggest_query\n<br />MySQL Error: " .mysql_error());            
    while ($suggest = mysql_fetch_array($suggest_query, MYSQL_ASSOC)) {    
    //while($suggest = db_fetch_array($suggest_query)) {
        //Return each page title seperated by a newline.
        echo $suggest['post_title'] . "\n";
    }
}





mysql_close($con);
?>

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

Я заметил в обсуждении выше, что вы сейчас возвращаете JSON и анализируете его со стороны клиента.И я заметил, что вы пометили свой вопрос с помощью jQuery, так что я думаю, что вы используете это.Это не ответ на ваш вопрос, но вот несколько советов по кодированию javascript с помощью jQuery, которые помогут упростить ваш код на тонну.

  • вместо того, чтобы выполнять ваши вызовы ajax с использованием объекта XMLHttpRequest напрямую,просто используйте $ .get (url, successFunction)
  • вместо использования getElementById ('some-id'), используйте $ ('# some-id'), а затем выполняйте такие вещи, как очистка внутреннего html,Вы можете сделать $ ('# some-id'). html ('').Используя элемент jQuery вместо HTMLElement, вы также можете манипулировать DOM кросс-браузерно-совместимым способом: http://api.jquery.com/category/manipulation/
  • вместо встраивания вашего javascript в ваш HTML (все эти обработчики onmouseover и onmouseout), используйте $('div.suggest_link'), чтобы выбрать все div на странице, которые имеют класс "offer_link".Затем присоедините обработчик события live, который будет работать с динамически генерируемым html, например: $ ('div.suggest_link'). Live ('mouseover', handleMouseOverForSuggestLink).Вы можете прочитать больше об этом на странице jQuery: http://api.jquery.com/live/

Все эти предложения будут работать в современных браузерах и помогут сократить объем кода.Удачи!

0 голосов
/ 16 февраля 2011

В общем, xajax может многое упростить. Посмотрите на мой ответ здесь:

как назначить переменную javascript переменной smarty

0 голосов
/ 07 февраля 2011

Вы должны вернуть данные с сервера в JSON (или XML, но JSON проще), а затем проанализировать их в Javascript.Показывать заголовки пользователю, id хранить для себя.

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