使用asp从数据库中自动完成jQuery

时间:2013-05-03 10:23:18

标签: jquery sql-server asp-classic autocomplete sql-server-2008-r2

我有asp页面,我需要显示来自Sql Server数据库的数据表,我想从2个文本区域中选择城市名称(例如源和目标),然后显示该行的所有信息。 这是autocomplete.html的副本:

    <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css" />
<script>
$(function() {
var availableTags = [
"Shanghai",
"Shenzhen",
"Casablanca",
"Jeddah",
"Paris",
"PHP",
"London",
"Tokyo",
"Jeddah",
"Istambul"
];
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>
    </head>
    <body>
    </body>
</html>

在页面index.asp中:

    ....
    <!--#include file="autocomplete.html"--> <label for="tags"> POD </label>
<input id="tags" />
    <br>

我想从jQuery自动完成中获取数据库中的源和目标不是这样的:

var availableTags = [
"Shanghai",
"Shenzhen",
"Casablanca",
"Jeddah",
"Paris",
"PHP",
"London",
"Tokyo",
"Jeddah",
"Istambul"
];

我怎么能这样做?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以像使用表单一样使用Classic ASP。尝试将代码括号放在数组列表中,如此...

var availableTags = [<%=GetCities() %>];

然后,您的GetCities()函数会将所需城市的列表输出到Response对象。

- 编辑 -

以下代码尚未经过全面测试。您可能还需要修改适合您需求的零件:

const C_NO_DATA = "NO_DATA"              'Used when no data is returned to a consuming routine
const C_ERROR   = "ERROR"                'Used when an error is generated - to be fed to the comsuming routine

'GetDataSet
'    Returns a table of data based on the supplied SQL statement and connection string.
'Parameters:
'    sqlString (string) - The SQL string to be sent.
'    connString (string) - The database connection string.
'Usage:
'    dataSet = GetDataSet(sqlString, connString)
'Description:
'    This function generates a table of information in a 2 dimensional array.  The first dimension represents the columns
'    and the second the rows.  If an error occurs while the routine is executing the array and the base index (0,0) is set 
'    to C_ERROR, (0,1) to the VBScript error index, and (0,2) to the VBScript error description.
function GetDataSet(sqlString, connString)
    'Initialise...
    dim returnVal, rsData
    on error resume next
        'Define and open the recordset object...
        set rsData = Server.CreateObject("ADODB.RecordSet")
        rsData.Open sqlString, connString, 0, 1, 1
        'Initialise an empty value for the containing array...
        redim returnVal(0,0)
        returnVal(0,0) = C_NO_DATA
        'Deal with any errors...
        if not rsData.EOF and not rsData.BOF then
            'Store the data...
            returnVal = rsData.GetRows()
            'Tidy up...
            rsData.close
            set rsData = nothing
            select case err.number
                case 3021    'No data returned
                    'Do nothing as the initial value will still exist (C_NO_DATA)
                case 0        'No error
                    'Do nothing as data has been returned
                case else
                    redim returnVal(4,0)
                    returnVal(0,0) = C_ERROR
                    returnVal(1,0) = err.number
                    returnVal(2,0) = err.description
                    returnVal(3,0) = sqlString
                    returnVal(4,0) = connString
            end select
        end if
    on error goto 0
    'Return the array...
    GetDataSet = returnVal
end function

function GetCities()
    dim sql, tCity, rc, max, rv
    sql = _
        "SELECT " & _
            "'""' + city_name + '""' AS city " & _
        "FROM  " & _
            "clkj_freight  " & _
        "WHERE  " & _
            "pol = '" & replace(request.querystring("q"), "'", "''") & "'"
    tCity = GetDataSet(sql, conn)
    if tCity(0, 0) = C_ERROR or tCity(0, 0) = C_NO_DATA then rv = tcity(0, 0)
    max = UBound(tCity, 2) '2 is the second dimension of the array
    for rc = 0 to max
        Response.Write(tCity(rc, 0))
        If rc<max then Response.Write(",")
    Next 'rc
    'If an error is encountered or no data is returned then notify the user (this behaviour may be changed if necessary)...
    GetCities = rv
end function