根据需要从php请求加载数据

时间:2013-04-24 19:38:17

标签: php jquery ajax json

我正在使用所选的jquery插件,它将多选框改为facebook风格的选择器。我正在填写英国邮政编码以及显示选定的邮政编码。

由于我的PHP请求从我的邮政编码数据库中检索了大量数据,因此页面显然运行得非常慢,但我想只能在用户输入框中输入1个字符后才能检索数据。

我知道我必须使用Ajax并且我认为JSON,但现在确定如何?

这是我的代码

    <select name="zipcode[]" style="width:600px; height:250px;" multiple class="chzn-select" id="zipcode">

          <?php $arraypostcode = explode(",", $zipcode); ?>
    <?php
do { // begin loop
?>
    <option value="<?php echo $row_postcode['code']?>"<?php for ($i=0; $i<sizeof($arraypostcode); $i++) {if ($row_postcode['code'] == $arraypostcode[$i]) {echo " selected"; break;}}?>><?php echo $row_postcode['code']?></option>
    <?php
} while ($row_postcode = mysql_fetch_assoc($postcode)); // end loop
  $rows = mysql_num_rows($postcode);
  if($rows > 0) {
      mysql_data_seek($postcode, 0);
      $row_postcode = mysql_fetch_assoc($postcode);
  }
?>
  </select>

PHP请求:

<?php

$postcode = mysql_query( "SELECT postcode.code FROM postcode");
$row_postcode = mysql_fetch_assoc($postcode);
$totalRows_postcode = mysql_num_rows($postcode);

?>

任何想法?

2 个答案:

答案 0 :(得分:0)

使用ajax:

你可以运行

$postcode = mysql_query( "SELECT postcode.code FROM postcode WHERE code LIKE 'YOUR_USER_VALUE%'"); $row_postcode = mysql_fetch_assoc($postcode); $totalRows_postcode = mysql_num_rows($postcode);

每次用户输入字符时都必须运行

LIKE'VALUE%'如果您熟悉其他编程语言为java或其他东西,那么sql中的这几乎意味着startsWith(“VALUE”)。

如果您的值存储为数字,那么您必须转换: cast(code as char)

答案 1 :(得分:0)

你可以尝试这些方法。

在表格页面上:

<input type="text" name="postcodeSearch" onChange="getPostcodes(this.value); return false;">
<div id="postcodeSelector"></div>

使用Javascript:

function getPostcodes(input){
    if(input.length >= 3){
        searchPostcodes(input);
    }
}

function searchPostcodes(input){
    $.ajax({
        url:'/url/to/postcodeSearch',
        data: "input=" + input,
        dataType: 'html',
        timeout: 5000,
        success: function(data, status) {
            $("#postcodeSelector").html(data);
        }
    }
}

在/ usr / to / postcodeSearch页面:

$input = $_GET["input"];

## Do database search with 'input' string
$postcodes = $somedbconnection->searchPostcodes($input);
?>
<select name="postcode">
    <? foreach($postcodes as $postcode){ ?>
        <option value='<?=$postcode["id"]?>'><?=$postcode["postcode"]?></option>
    <? } ?>
</select>