2014-04-08 68 views
0

我使用jQuery UI的這個片段:jQuery的發送陣列使用JSON

$(document).ready(function() { 
    $(function() { 
     function log(message) { 
      $("<div>").text(message).prependTo("#log"); 
      $("#log").scrollTop(0); 
     } 
    }); 
    $("#birds").autocomplete({ 
     source: "search.php", 
     minLength: 4, 
     select: function(event, ui) { 
      log(ui.item ? 
       "Selected: " + ui.item.value + " aka " + ui.item.id : 
       "Nothing selected, input was " + this.value); 
     } 
    }); 
}); 



<div class="ui-widget"> 
    <label for="birds">Birds: </label> 
    <input id="birds"> 
</div> 
    <div class="ui-widget" style="margin-top:2em; font-family:Arial"> 
    Result: 
    <div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"> 
    </div> 
/div> 

和我的search.php:

$myarray = ["somelabelvalue","somelabelvalue1","somelabelvalue2","somelabelvalue3"]; 
echo json_encode($myarray); 

但是當我鍵入: 「OEM廠商」=每個選項>陣列出現了!爲什麼? 只有當我輸入「some」時它纔會出現。 那麼我的錯誤在哪裏search.php?

這一個正常工作:http://jqueryui.com/autocomplete/#remote ..

問候!

+0

當你鍵入 「OEM廠商」 在哪裏?你正嘗試從PHP發送json到jquery,或者反過來呢? –

+0

當我輸入「oems」在輸入字段,這是發送到search.php,你看到jQuery鏈接? – user3512705

回答

1

問題是,無論用戶鍵入什麼,您都返回相同的數組。您應該在PHP代碼中做的是根據用戶給定的值執行一些檢查。 請注意,jQuery代碼只列出PHP代碼返回的內容,因此過濾依然由您決定。

要爲您在評論中提及了創建磁盤陣列,你需要做的是這樣的:

$array = array(
array("id"=>"the id", "label"=>"the label", "value"=>"the value"), 
array("id"=>"another id", "label"=>"another label", "value"=>"another value"), 
); 

你打電話echo json_encode($array)後,你會得到期望的結果。

+0

thx,所以我怎麼能創建這樣一個數組? :[{「id」:「Botaurus stellaris」,「label」:「偉大的苦汁」,「價值」:「偉大的苦汁」},{「id」:「Tachybaptus ruficollis」,「標籤」:「小Gre」「, 「值」:「小Gre」「}] – user3512705

+0

,因爲這似乎是正確的數組,應該返回 – user3512705

+0

您需要索引數組。 http://www.php.net/manual/en/language.types.array.php – TGO

0

迴應TGO所說的,你必須在你的PHP代碼中進行過濾。 jQuery將對您爲source選項提供的URL發出GET請求。因此,在您的PHP代碼中,您應該使用$_GET['term']的值來決定返回到哪個JSON數組爲echo。 PHP有函數用於測試一個字符串是否是另一個字符串的子字符串,您可以使用這樣的函數來過濾數組。

0
$(document).ready(function() { 
     function log(message) { 
      $("<div>").text(message).prependTo("#log"); 
      $("#log").scrollTop(0); 
     } 
    $("#birds").autocomplete({ 
     source: function(request, response) { 
      $.getJSON("search.php", { 
      term: request.term 
      }, response); 
     }, 
     minLength: 4, 
     select: function(event, ui) { 
      log(ui.item ? 
       "Selected: " + ui.item.value + " aka " + ui.item.id : 
       "Nothing selected, input was " + this.value); 
     } 
    }); 
}); 

<?php 
$found_terms = array(); 
if(isset($_GET['term'])){ 
    $term = trim($_GET['term']); 
    $myarray = array(
     "somelabelvalue", 
     "somelabelvalue1", 
     "somelabelvalue2", 
     "somelabelvalue3" 
     ); 
    foreach($myarray as $value){ 
     if(strstr($value, $term)){ 
      $found_terms[] = $value; 
     } 
    } 
} 
echo json_encode($found_terms); 
?>