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"]
*/
?>

これを Cookieに入れるつもり$jsonstringです。これにより、複数の異なるページで参照できるようになり、今後クエリを作成する手間が省けます。https://github.com/carhartl/jquery-cookieの 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

Cookie の部分については、HTML5 を使用している場合は、ローカル ストレージ API http://www.w3schools.com/html/html5_webstorage.aspを使用することをお勧めします。時間。

于 2013-09-08T00:46:40.147 に答える
0

への呼び出しif( allNames.text().search('stark') != -1){ が間違っています。メソッドallNamesがありませんtext() 。コンソールに「オブジェクトにはメソッド '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 に答える