1

こんにちは、私の質問を読んでくれてありがとう。

私のウェブサイトは Godaddy でホストされており、「デラックス Linux ホスティング パッケージ」を持っています。

私の Web ページは、ユーザーが JQuery、Ajax、PHP、および MySQL を使用して検索用語に関連する提案を表示する単純なフォームを使用して市場を見つけるのに役立ちます。

検索フィールドでオートコンプリート機能を使用しているため、ユーザーが検索語を入力すると、関連する提案が id 'list_area' の div の入力フィールドの下に表示されます。

提案はJQueryとPHPスクリプトによって入力されており、AJAX「Post」メソッド(エラーをコンソールに記録したかったため、現在は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