Javascript 如何在不刷新的情况下将mysql数据返回网页(ajax/jquery/php/mysql)

Javascript 如何在不刷新的情况下将mysql数据返回网页(ajax/jquery/php/mysql),javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,昨晚我又问了一个问题,但后来我看到mysql被弃用了,于是我改用了mysqli。无论如何,我在search.php文件中有以下php——我保留了一些在我上次尝试时有效的注释 // Get all records while ( $row = $results->fetch_assoc()) { //$data[] = $row; echo ('COLUMN1:'.$row["COLUMN1"]); echo ('COLUMN2:'.$row["COLUMN2"]); ech

昨晚我又问了一个问题,但后来我看到mysql被弃用了,于是我改用了mysqli。无论如何,我在search.php文件中有以下php——我保留了一些在我上次尝试时有效的注释

// Get all records
while ( $row = $results->fetch_assoc())
{
  //$data[] = $row;
  echo ('COLUMN1:'.$row["COLUMN1"]);
  echo ('COLUMN2:'.$row["COLUMN2"]);
  echo ('COLUMN3:'.$row["COLUMN3"]);
  echo ('<br>');
}
$mysqli->close();
//echo json_encode( $data );

 ?>
我希望能够将DB表中的任何列写入div,显示尽可能多的行。我最初使用的是以下不太有效的方法(仅显示2行..我可以理解原因(我认为对数组的理解很差):

/*for(行中的变量行)
{
var COLUMN1=行[1];
var COLUMN2=行[2];
$(“#result”).append(“COLUMN1”+column1e+”COLUMN2:“+COLUMN2”).append(
); } */
编辑:HTML

<div id="main">
  <form id="search_form" role="form" action="" method="post">
    <div class="form-group">
  <input type="text" class="form-control" name="txt_search" id="txt_search" placeholder="Enter name here" autocomplete="off" >
  <p></p>
  <button type="submit" id="btn_search" class="btn btn-default">Retrieve </button>
</div>
  </form>
  <div class="result" id="result">this accessed by jquery and will be replaced</div>
  /div>

检索 jquery可以访问它,它将被替换 /div>
不管怎样,我有一个名为result的div,我现在想用一个结果表填充它。有人能回答并帮助我更好地理解它吗(我发现这类事情有一个问题,网上有数百个例子,没有解释他们为什么做这些事情,而且所有的例子都不同)

编辑2:删除,编辑3包含更好的代码:

将3:HTML编辑为变量:

$HTML = "<table border='1' >";
$HTML .= "<tr>";
$HTML .= "<td align=center> <b>Column1</b></td>";
$HTML .= "<td align=center><b>Column2</b></td>";
$HTML .= "<td align=center><b>Column3</b></td>";

// Get all records
while ( $row = $results->fetch_assoc())
{

    $HTML .= '<tr>';
    $HTML .= '<td align=center>'.$row["COLUMN1"].'</td>';
    $HTML .= '<td align=center>'.$row["COLUMN2"].'</td>';
    $HTML .= '<td align=center>'.$row["COLUMN3"].'</td>';
    $HTML .= '</tr>';
}
$mysqli->close();
$HTML .=  "</table>";
echo $HTML;

echo json_encode( $HTML );

 ?>
$HTML=”“;
$HTML.=”;
$HTML.=“Column1”;
$HTML.=“Column2”;
$HTML.=“Column3”;
//获取所有记录
而($row=$results->fetch_assoc())
{
$HTML.='';
$HTML.=''.$row[“COLUMN1”].';
$HTML.=''.$row[“COLUMN2”].';
$HTML.=''.$row[“COLUMN3”].';
$HTML.='';
}
$mysqli->close();
$HTML.=”;
echo$HTML;
echo json_encode($HTML);
?>

在此特定示例中,仅为了演示您可以通过在成功函数中使用此选项来更改#result div的内容:

$('#result').html(rows); 
但通常情况下,您会在search.php文件中创建一些HTML结构,动态生成一些HTML,然后用search.php返回的替换target#result div

您还需要将index.html的文件扩展名更改为index.php


编辑:原因是删除了数据类型:json。

也显示您的标记。通过ajax调用php文件。它会工作,我(我认为):url:“./php/search.php”,但不幸的是,它在index.html上没有做任何事。我使用的是Fiddler,看起来数据正在返回(我可以看到search.php正在被调用)但是它没有被显示-我的ajax/jquery的成功部分是错误的?谢谢,我已经尝试过了-我已经编辑了我的原始帖子,稍后我尝试简单地在div中添加一个表。我应该“回应”什么作为对search.php结尾的回应,是否正确?是的,您现在正处于正确的轨道上,但几乎不需要做任何修改。是的,您将在结束时回显HTML,但仅在完成处理后回显一次。因此,最好像您当前所做的那样,通过连续串联将所有HTML存储在一个变量中,并在结束时回显变量。我已将其更改为上面的第三个编辑,但它仍然没有将数据拉入index.php…如果我直接调用search.php,效果很好,我可以看到包含所有结果的表,但不幸的是ajax没有显示它?编辑我发现了问题,如果我将ajax更改为不使用Json的数据类型,它将显示数据。哦,是的。你也不需要在php代码中回显json_enchode($HTML)。干杯!
$HTML = "<table border='1' >";
$HTML .= "<tr>";
$HTML .= "<td align=center> <b>Column1</b></td>";
$HTML .= "<td align=center><b>Column2</b></td>";
$HTML .= "<td align=center><b>Column3</b></td>";

// Get all records
while ( $row = $results->fetch_assoc())
{

    $HTML .= '<tr>';
    $HTML .= '<td align=center>'.$row["COLUMN1"].'</td>';
    $HTML .= '<td align=center>'.$row["COLUMN2"].'</td>';
    $HTML .= '<td align=center>'.$row["COLUMN3"].'</td>';
    $HTML .= '</tr>';
}
$mysqli->close();
$HTML .=  "</table>";
echo $HTML;

echo json_encode( $HTML );

 ?>
$('#result').html(rows);