Php jQuery AJAX数据库查询和使用结果更新HTML列表
我在搜索数据库和输出数据时遇到了一个小问题 这是我的模板。不要介意Php jQuery AJAX数据库查询和使用结果更新HTML列表,php,jquery,mysql,html,ajax,Php,Jquery,Mysql,Html,Ajax,我在搜索数据库和输出数据时遇到了一个小问题 这是我的模板。不要介意$页面->\uz()。这是因为我的框架。想想phpsecho <?php $movies = array(); if( isset($_POST['searchtext']) && isset($_POST['ajax']) && $_POST['ajax']==1 ) $movies = Movie::getByTitle( $_POST['searchtext'] ); $list
$页面->\uz()
。这是因为我的框架。想想phpsecho
<?php
$movies = array();
if( isset($_POST['searchtext']) && isset($_POST['ajax']) && $_POST['ajax']==1 )
$movies = Movie::getByTitle( $_POST['searchtext'] );
$list = '<ul id="results">';
if( isset( $movies ) && $movies!=null )
foreach($movies as $movie)
$list.= '<li>'.$movie->getTitle().'</li>';
else if( isset($_POST['ajax']) && $_POST['ajax']==1 )
$list.='<li>No Results!</li>';
$list.= '</ul>';
if(isset($_POST['ajax']) && $_POST['ajax']==1){
$json = array(
'success' => true,
'html' => $list
);
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Expires: 0');
header('Content-type: text/json');
echo json_encode($json);
die();
}
$page->_(
'<section class="dialog-fixed small">',
'<form id="search-form" method="post" action="#home">',
'<fieldset>',
'<input type="text" name="searchtext" />',
'<input type="submit" name="moviesubmit" value="Search"/>',
'</fieldset>',
'</form>'
);
$page->_($list);
$page->_('</section>');
?>
现在..我查询的数据库表大约有1.000.000行(movies)
例如,如果我搜索“阿甘正传”,效果会很好……但是如果我搜索的字符数较少的东西,让我们说“一”,它不会返回任何东西。我尝试在phpmyadmin中搜索我的数据库中的“One”,它返回了大约15000个结果……好吧,我认为这可能太多了,我的脚本无法处理,所以我在数据库查询的末尾设置了一个限制30
。。
也不行。在搜索“一”之后,我没有得到任何回报,甚至没有得到它应该得到的“没有结果”(实际上不应该,但你知道我的意思)。我的脚本停止工作了。
如果我搜索像“一”这样的东西,在这之后我就什么也找不到了。甚至《阿甘正传》也没有给我任何结果。
我真的不知道问题出在哪里。我的萤火虫帮不了我;)
有什么提示吗
编辑:
好的,我找到了我的问题所在。json_encode($json)不起作用。我还没弄明白原因。此解决方案的工作原理是:
script.js:
$.ajax({
type: 'post',
url: BASEURL+f.attr('action'),
data: f.serialize()+'&ajax=1',
dataType: 'text',
success: function(data) {
if(data!=''){
$('#results').replaceWith(data);
}
},
error: function(xhr,txt,err) {
alert(txt+' ('+err+')');
}
});
php模板:
if(isset($_POST['ajax']) && $_POST['ajax']==1){
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Expires: 0');
header('Content-type: text/html');
echo utf8_encode($list);
die();
}
你在使用全文搜索吗?如果是这样,MySQL在进行全文搜索时必须提供最少的字符数,否则它将不返回任何内容。这是我的第一个猜测
这是可配置的,尽管我不知道如何从头开始做。这是一个很好的理由,因为全文搜索通常意味着通过巨大的字符串进行搜索,所以如果您只给它“一”,它将返回许多巨大的行。如果您不是这样使用它的,那么您可能可以减少字符数量,尽管这也会给您的用户提供更多的查看空间。索引您正在搜索的字段。 主索引将为您提供不重复的内容,或者使用全文索引。
详细信息正常..发现问题。我数据库中的一些字符串不是正确的UTF-8…json_encode()对此有问题,因此在我的php模板中,我必须更改
$list.=''.$movie->getTitle()。 '代码>到$list.=''.utf8_编码($movie->getTitle())。 代码>您是否尝试了脚本执行的来自phpmyadmin的相同查询?(与“%1%”类似)除非您的查询返回id为results
的HTML元素,否则.replaceWith
很可能是您的问题。。。(它替换了整个元素,意味着下次搜索时不会用到它)@Herohtar那么如果我在搜索“阿甘正传”后尝试搜索例如“不可能完成的任务”,它将不起作用。但它不起作用,因为有很多电影都有相同的标题,但我会尝试全文索引。
if(isset($_POST['ajax']) && $_POST['ajax']==1){
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Expires: 0');
header('Content-type: text/html');
echo utf8_encode($list);
die();
}