2012-10-05 37 views
0

希望能夠找到答案。jQuery自動完成json/ajax和odbc結果

我在PHP中創建一個Web應用程序,其中我有一個記錄列表和一些搜索字段。 其中一個搜索字段是「customernumber」。客戶編號保存在本地數據庫(MySQL)中。如果我在customernumber上搜索,它會給我數據庫的相應結果行=>邏輯。

現在我想用jQuery UI Autocomplete構建此搜索字段的擴展。

我想做什麼:

我希望用戶是阿貝爾搜索的客戶名稱中searchfield「CUSTOMERNUMBER」和西港島線自動完成給出正確的CUSTOMERNUMBER入值。

客戶名稱也保存在外部ODBC數據庫中,同時也包含客戶編號。

我所做的已經:

我試圖從外部ODBC數據庫獲取所有的名字和號碼ANS我有像這樣的列表:

customername: somename1 
customernumber: number1 

customername: somename2 
customernumber: number2 

customername: somename3 
customernumber: number3 

... and so on 

如果我這樣做自動完成與ajax調用這個列表,它根本不工作。

有人可以幫我嗎?經過幾次搜索後,我無法在互聯網上找到答案或任何接近答案的答案。

我會真的很棒! 謝謝!

我什麼,我走到這一步,例如:

jQuery腳本:

<script 
    $(function() { 
     function log(message) { 
      $("<div/>").text(message).prependTo("#log"); 
      $("#log").scrollTop(0); 
     } 

     $("#customer").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        url: "customers.php", 
        dataType: "json", 
        success: function(data) { 
         response(function(item) { 
          return { 
           label: item.customername, 
           value: item.customernumber 
          } 
         }); 
        } 
       }); 
      }, 
      minLength: 3, 
      select: function(event, ui) { 
       log(ui.item ? 
        "Selected: " + ui.item.label : 
        "Nothing selected, input was " + this.value); 
      } 
     }); 
    }); 
</script> 

輸入HTML:

<div class="ui-widget"> 
    <label for="customer">Search</label> 
    <input id="customer" /> 
</div> 

SQL查詢中customers.php

$connection = odbc_connect('host', 'username', 'password') 
       or die('Connection failed!'); 

$sql = "SELECT 'customername', 'customernumber' FROM 'database.table'"; 

$results = odbc_exec($connection, $sql); 

while($myRow = odbc_fetch_array($results)){ 
    $rows[] = $myRow; 
}; 

foreach($rows as $row) { 
    foreach($row as $key => $value) { 
     echo $key . ': '. $value . '<br/>'; 
    } 
}; 

要清楚

我鍵入搜索框的客戶名稱, 我想檢索CUSTOMERNUMBER作爲值。

+0

請向我們展示服務器響應的示例,以便我可以提供更具體的解決方案。 –

+0

例如張貼,見上面 – Jens

+0

添加評論和適當的解決方案,我的答案。 –

回答

1

您必須以適當的格式將數據傳回。

while($r = odbc_fetch_array($results)) 
    $rows[] = array("label" => $r[0], "value" => $r[1]);  
echo json_encode($rows); 

$("#search").autocomplete({ 
     //define callback to format results 
     source: function(request, response){ 
      //pass request to server 
      $.getJSON("query.php?term=" + request.term, function(data) { 
       response(data); 
      }); 
     }); 
    }); 

查看jQuery UI documentation瞭解更多選項。

編輯 與您當前的解決方案

  • odbc_fetch_array可能會在一些RDBS的(使用的print_r調試)

    名稱數量沒有列名返回值 鮑勃123

問題

變成

Array 
    (
     [0] => "Bob" 
     [1] => 123 
    ) 
  • JSON輸出甚至不是有效的(使用Firebug調試),目前產量爲我們的例子是:

    0: 「鮑勃」 1:123

+0

**謝謝!**它適用於我。我只修改了一些代碼,以更好地爲我工作。 ** 1)**在我的SQL查詢中,我爲客戶名列添加了一個「LOWER」語句來區分不區分大小寫的搜索。 ** 2)**我在SQL查詢中添加了''$ _GET ['term']「',也是lowsercase和開始和結尾%。 ** 3)**在While循環中,我使用了列名而不是偏移量。 – Jens