2014-02-14 277 views
0

我一直試圖讓這個工作幾天,而我沒有得到任何代碼。我有一個表單,它有一個文本框,需要列出我試圖使用自動完成功能的外部推銷員。使用JSP + AJAX從數據庫填充jQuery UI自動填充

這是形式(doorform2.jsp)代碼

<script> 
    $("#outsideSales").autocomplete({source: "outsideIn.jsp",minLength: 2}); 
</script> 

<input type="text" name="outsideSalesman" id="outsideSales" required> 

這是我使用的從我的數據庫中的數據以用於自動完成

<% 
Connection con = null; 
Statement stmt = null; 
ResultSet rs = null; 

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
con = DriverManager.getConnection("jdbc:sqlserver://nemesis:1433;instanceName=gfi;databaseName=NationalFormsRepository;user=portal;password=P0rtal"); 
stmt = con.createStatement(); 

String outside = request.getParameter("outsideSalesman"); 

ArrayList<String> outsideSalesmenNames = new ArrayList<String>(); 
String outsideSalesman = "SELECT outsideSalesName FROM tbl_outsideSales WHERE outsideSalesName like '%"+outside+"%'"; 

rs = stmt.executeQuery(outsideSalesman); 

while(rs.next()) 
{ 
    outsideSalesmenNames.add(rs.getString("outsideSalesName")); 
} 
out.println(outsideSalesmenNames); 

%> 

我的代碼我試圖在線上學習幾個教程,但我一直遵循的大部分教程都是針對php而不是jsp,或者它們針對的是舊版本的jquery自動完成。我覺得我錯過了一些小小的東西,但一直在看它,以期看到它。任何人都可以看一看,看看我是否缺少任何東西?

回答

0

首先,你的代碼不被包裹在裏面$(document).ready()

<script> 
$("#outsideSales").dosomething(); 
</script> 
<!-- Note: #outsideSales does not exist before this line --> 
<input id="outsideSales"> 

修改這樣的代碼:

<script> 
$(document).ready(function(){ 
    $("#outsideSales").dosomething(); 
}); 
</script> 
<input id="outsideSales"> 

#2:如預期下將無法正常工作,當您指定的URL作爲源參數和jQuery UI會發送包含請求查詢字符串參數term。所以,你需要相應地修改代碼:

String outside = request.getParameter("term"); 

#3:jQuery UI的期望一個有效 JSON而不是字符串。因此,而不是這樣的:

[Jack, Jill, John] 

你的程序需要輸出:

["Jack", "Jill", "John"] 

PS:您的查詢是開放的SQL注入。

+0

好吧,我將request.getParameter更改爲「term」,並添加了JSONArray json = new JSONArray(Arrays.asList(outsideSalesmenNames));'但我在輸入文本框時仍然沒有得到建議。我有一個導入'<%@ page import =「//raw.github.com/douglascrockford/JSON-java/master/JSONArray.java」%>' – jaz1976

+0

打開AJAX頁面(即'http:// website。 com/outsideIn.jsp?term = test')並確保它正在工作。 –

+0

我收到代碼的JSON部分的錯誤。整個錯誤消息超過了消息框的大小,但這是消息的開頭。HTTP狀態500 - 內部服務器錯誤 類型例外報告 messageInternal服務器錯誤 description服務器遇到阻止它履行此請求的內部錯誤。 異常 org.apache.jasper.JasperException:PWC6033:JSP的Javac編譯錯誤。如果我刪除了JSON代碼,該頁面可以正常工作。我認爲這可能是我鏈接到的java文件。 – jaz1976

0

您的outsideIn.jsp必須返回一個JSON格式化的數據。

來自官方文檔:「數據源是一個服務器端腳本,它返回JSON數據,通過源選項的簡單URL指定。另外,minLength選項設置爲2以避免查詢返回的結果太多,選擇事件用來顯示一些反饋。「

在這裏看到更多的信息:link

乾杯:)