Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery AJAX数据库查询和使用结果更新HTML列表_Php_Jquery_Mysql_Html_Ajax - Fatal编程技术网

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()
。这是因为我的框架。想想phps
echo

<?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();
    }