jQuery自动完成,基于其他选项从网址缓存

时间:2014-12-28 20:20:37

标签: jquery ajax google-app-engine caching jquery-autocomplete

我一直在为这个项目苦苦挣扎几天,我希望能得到一些帮助。我有以下受保护的网址:

/item/code?comp=comp1

这将数据作为公司所有代码的json返回,格式如下:

[{'code':'test1','hdescrip':'Test code 1','type':'test type', etc.},and so on]

然后我在网页上有两个组件:

<table>
    <tr>
        <td width="79">Search Type</td>
        <td>
            <input type="checkbox" name="type_chk[]" id="type_chk" value="group" checked="checked"/>
            <label for="type_chk">Group</label>
           </td>
        <td ><input type="checkbox" name="type_chk[]" id="type_chk" value="pick" checked="checked"/>
            <label for="type_chk">Pick List</label></td>
        <td ><input type="checkbox" name="type_chk[]" id="type_chk"  value="item" checked="checked"/>
            <label for="type_chk">Item</label></td>
        <td><input type="checkbox" name="type_chk[]" id="type_chk" value="service" checked="checked"/>
            <label for="type_chk">Service</label></td>
      </tr>
    <tr>
        <td colspan="2"><input type="text" width="6" id="code" name="code" /><label for="code">Code</label></td>
        <td colspan="3"><input type="text" width="75" id="hdescrip" name="hdescrip" /><label for="hdescrip">Description</label></td>
    </tr>
</table>

考虑到代码部分有1000个可能具有类似代码和描述的项目,在我的数据库上调用和搜索部分匹配是很昂贵的。我想要做的是根据代码类型的选择加载数据库,并将其设置为表格中每个相应输入的自动完成源。

因此,如果他们点击组例如,源的新网址将是/item/code?comp=comp1&type_chk="pick,item,service,应该缓存浏览器端 - 我看到人们使用var cache = {}方法,但我不知道认为这是正确的。此缓存应该用作代码自动完成的源数据,然后将传递的数据的hdescrip组件与hdescrip输入文本进行匹配。

我知道如何将其设置为ajax调用,但我不想经常ping数据库。

此外,这是在谷歌应用引擎上,所以我无法创建静态文件。

有什么想法吗?

谢谢! 乔恩

1 个答案:

答案 0 :(得分:1)

首先,您将需要一个服务器端代码,它将在页面的onLoad和onSelection上查询数据库。

您的算法:

  
      
  1. 连接数据库并执行查询。
  2.   
  3. 返回数据集并从返回的数组中创建JSON字符串
  4.   
  5. 将JSON保存到文件
  6.   
  7. 查询表示返回的JSON文件或对象用于解析
  8.   
  9. 重复#1 - #4 onSelect
  10.   

#1和#3的代码如下所示:

var myJSON = {};

function getData(something){
    $.ajax({
      url: 'getDataFromDB.php',
      type: 'GET',
      data: 'parameter=something',
      success: function(data) {
        //called when successful
        myJSON = data;
      },
      error: function(e) {
        //called when there is an error
        //console.log(e.message);
      }
    });
}

#2中的代码可能如下所示 - 如果使用PHP(当然可以使用其他语言)

$return_arr = array();
$something = $_GET['parameter'];

$fetch = mysql_query("SELECT * FROM table where column = $something"); 

while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
    $row_array['id'] = $row['id'];
    $row_array['col1'] = $row['col1'];
    $row_array['col2'] = $row['col2'];

    array_push($return_arr,$row_array);
}

$newJSON = json_encode($return_arr);

$destination = "myData.json";
file_put_contents($destination, minifyJson($newJSON));

然后#4中的代码可能会以这样的代码开头:

var myJSONData = {};

function getJSONData(){
    $.getJSON( "myData.json", function( data ) {
      console.log(data); //dump out the json object returned
      myJSONData = data;
    });
}

$('#someID').onClick(function(){
  var selection = $('#someID').val();
  getData(selection);
});

从那里你可以触发上面的函数onClick并通过查询字符串将参数传递给你的PHP文件,并使用$_GET['parameter']来操纵从数据库返回的内容。您希望稍微调整上面的代码,但这应该给您一个大致的想法。祝你好运。