1

您好,感谢您花时间阅读我的问题。

我的网站托管在 Godaddy 上,并且我有“豪华 Linux 托管包”。

我的网页使用简单的表单帮助用户找到市场,该表单使用 JQuery、Ajax、PHP 和 MySQL 来显示与其搜索词相关的建议。

我在搜索字段中使用了自动完成功能,这样当用户输入他们的搜索词时,相关建议会出现在 id 为“list_area”的 div 中的输入字段下方。

这些建议由 JQuery 和一个 PHP 脚本填充,该脚本通过 AJAX“发布”方法(现在是 AJAX 方法,因为我想将错误记录到控制台)提供搜索词。

这是在 HTML 页面中调用 js 脚本的位置:

<input autocomplete="off" type="text" 
class="form-control input-lg" name="market_search" 
id="market_search" placeholder="Enter a market name" 
onkeyup="autoComplete();">

同一页面上还有一个 preventDefault 功能,可以防止在没有搜索词的情况下提交表单:

    <script>                    
        $( "#search_form" ).submit(function(e) {                            
            if( $('#market_search').val() =='' ){
                e.preventDefault();
            }                       
        });                     
    </script>   

这是 Autocomplete.js

function autoComplete()
{   
    var list_area   = $('#list_area');
    var min_length  = 1; 
    var search_term = $('#market_search').val();

    if (search_term.length >= min_length) { 

        $.ajax({
            type: 'POST',
            url: 'assets/scripts/search_markets.php',
            data: {
            search_term: search_term
            },
            success: function(data){

                list_area.hide().html(data).fadeIn('fast');
                console.log(status);                
            },
            error: function(xhr, textStatus, error){
                alert("Unable to retrieve data. Please try again.");
                console.log(xhr.statusText);
                console.log(textStatus);
                console.log(error);
            }
        });

    }else{
        list_area.hide();
    }
}


function set_item(item) {

    // change input value
    $('#market_search').val(item);

    // hide proposition list
    $('#list_area').hide();
}

这是search_markets.php

<?php
include("connect_to_mysql.php");

$output = '';
$search_term = mysql_real_escape_string($_POST['search_term']);

$sql = mysql_query("
                    SELECT name FROM markets 
                    WHERE name LIKE '%$search_term%' 
                    ORDER BY name LIMIT 0,10
                   ");

$num_rows = mysql_num_rows($sql);

if($num_rows > 0){

    $output .= '<ul>';
    while($row = mysql_fetch_array($sql)){

        $market_name = $row['name'];
        $market_name = preg_replace('/\s{2,}/u', ' ', $market_name); // replaces large spaces with single space between words

        $output .='<li onclick="set_item(\''.str_replace("'", "\'", $market_name).'\');">'.$market_name.'</li>';                
    }
    $output .= '</ul>';
}
echo($output);
mysql_close($mysql_conn);
?>

该代码的行为与您预期的一样,并在#list_area div 中返回一个建议列表。

但是,如果您在大约 30 秒的时间内过多地使用搜索字段 - 即您输入一个字母、删除该字母、输入一个字母,然后这样做几次等等 - 建议将停止出现并且该网站如果您尝试导航到主页,则会暂时不可用。

出现此错误:“连接已重置”

在 Chrome 中我得到错误:“net::ERR_EMPTY_RESPONSE”

在 Firefox 中,我没有收到该错误代码,它只是以红色突出显示与 search_markets.php 的尝试连接,并且没有提供更多详细信息。

我把这个问题放在这里是因为我有点新手,甚至不确定如何开始寻找解决方案;谷歌搜索与我的情况有关的错误并没有太大帮助,我不确定这是服务器问题、浏览器问题还是代码问题。

非常感谢您提供的任何帮助。

4

0 回答 0