0

我需要一种简单的方法来使用 javascript 搜索我的 Json 字符串。

这是创建我的 Json 字符串的 PHP:

<?php
$allnames = array();
$res = mysql_query("SELECT first,last FROM `tbl_names`");
while ($row = mysql_fetch_array($res)){
  $allnames[$i++] = $row['first'].':'.$row['last'];
}

echo $jsonstring = json_encode($allnames);
/* 
["john:smith","tony:stark","bruce:banner","clark:kent"]
*/
?>

我打算把它$jsonstring放到一个 cookie 中,这样我就可以在几个不同的页面上引用它,这样我就不用再做任何未来的查询了。我正在使用来自以下网址的 jquery cookie 插件:https ://github.com/carhartl/jquery-cookie

<script type="text/javascript" src="jquery.cookie.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
   $.cookie("allNames", JSON.stringify(<?=$jsonstring;?>))
});
</script>

到现在为止还挺好!cookie存在,数据保存,在浏览器中可以看到。

我现在对搜索该 cookie 的值很感兴趣,以查找这些名称中的任何一个。如果我找到一个,我将有选择执行,这取决于我的页面。

我想做的是从页面上的文本框中执行 onkeyup 事件:

<input type="text" name="lastname" id="lastname" />
<script language="javascript" type="text/javascript">
$(document).ready(function(){

  $("#lastname").keyup(function() {
    // search the "allNames" cookie value for lastname
     var allNames = $.cookie("allNames"); // gets cookie
     var lastname = $(this).val();

     // this is not seeming to work:
     if( allNames.text().search('stark') != -1){
        alert("that name exists");
     }else{
    alert("name does not exist");   
     }

  });

});
</script>

我确信这是一项简单的任务,我只是没有掌握。也许 json 也不是保存 cookie 数据的最佳方式。

但是我将如何搜索 cookie 的值?或者有人可以提出更好的解决方案吗?

4

3 回答 3

2

这是我的做法:

首先创建 JSON 并存储在 cookie 中:

<?php
    $allnames = array();
    $res = mysql_query("SELECT first,last FROM `tbl_names`");

    while ($row = mysql_fetch_array($res)){
        $allnames[$row['last']] = $row['first'];
    }

    setcookie("allNames", json_encode($allnames), time()+(3600*24*10)); //10 days
?>

然后得到它:

$(function(){
    $("#lastname").on('keyup', function() {
        var allNames = JSON.parse($.cookie("allNames")); // gets cookie
        var lastname = this.value.trim();

        if (lastname in allNames) {
            alert("that name exists");
        }else{
            alert("name does not exist");
        }
    });
});
于 2013-03-01T23:21:32.337 回答
0

你的调用if( allNames.text().search('stark') != -1){ 是错误的,allNames没有text() 方法,你应该在控制台上收到一个错误,说“对象没有方法'文本'”

它应该只是

if( allNames.search('stark') != -1){

但是,这会产生误报的问题:假设有一个名字与姓氏相同,或者有一个姓氏是另一个名字的子字符串。

如果您只是搜索姓氏,则应按照 adeneo 的建议改进结构,以姓氏为键的映射,或者您需要比仅使用 更加小心indexOf,如下所示

 var lastNames = JSON.decode(allNames).map(function(name){
     return name.split(":")[1];
 });

 // Note that this is not String.indexOf, it's Array.indexOf so it doesn't
 // suffer from the false positives from matching substrings
 if (lastNames.indexOf(lastName) > -1) {
      // Found it
 }
于 2013-03-01T23:47:15.423 回答
0

对于 cookie 部分,如果您使用的是 HTML5,我建议您使用本地存储 API http://www.w3schools.com/html/html5_webstorage.asp,因为您不想在所有的 cookie 中发送大量数据时间。

于 2013-09-08T00:46:40.147 回答