我有一个小问题,我想要一个实时搜索返回一个 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);
?>
最佳答案
我在上面的讨论中注意到您现在返回 JSON,并从客户端解析它。我注意到你用 jQuery 标记了你的问题,所以我猜你正在使用它。这不是您问题的答案,但这里有一些使用 jQuery 进行 javascript 编码的技巧,可以帮助您大大简化代码。
- 不要直接使用 XMLHttpRequest 对象进行 ajax 调用,只需使用 $.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') 选择页面上所有具有“suggest_link”类的 div。然后,附加一个实时事件处理程序,它将处理动态生成的 html,如下所示:$('div.suggest_link').live('mouseover', handleMouseOverForSuggestLink)。您可以在 jQuery 的页面上阅读更多相关信息:http://api.jquery.com/live/
所有这些建议都适用于现代浏览器,并有助于减少大量代码。祝你好运!
关于php - Ajax 实时搜索 - 获取 2 个字段而不是 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919162/