经典ASP和Ajax中的依赖组合?

时间:2009-10-27 09:11:44

标签: ajax asp-classic drop-down-menu

请你在经典的asp和ajax中建议我做一个依赖组合的例子吗?

3 个答案:

答案 0 :(得分:2)

您可能对solution using ajaxed感兴趣。

答案 1 :(得分:1)

在AJAX概念形式化之前很久,我就使用了一种名为XML Data Islands的技术来实现这种功能。显然,有许多AJAX框架和脚本可以实现类似的结果,但这只是我在遗留应用程序中使用多年的经过验证的技术。

我无法快速找到任何合适的文章,所以我挖出了一些旧的代码。基本上,当您设置父控件的值时,您运行一些将请求发送到单独的ASP页面的javascript。此页面查询数据库以确定将用于填充子控件的数据。

此第二页以XML格式返回结果,XML将在主页面的XML数据岛中存储和处理。然后调用javascript解析返回的XML并填充子控件。

首先我们来自主控件的javascript调用:

<tr>
                    <td>Customer:</td>
                    <td>
                        <select id="CustomerID" NAME="CustomerID" 
                            onfocus="javascript:populateCombo(fProcess.CustomerID.value)" 
                            onChange="javascript:populateCombo(fProcess.CustomerID.value)"  
                            onkeypress="javascript:populateCombo(fProcess.CustomerID.value);">
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Depot:</td>
                    <td>
                        <select name="depot" id="depot" size="1"  alt="Depot">
                            <option value="" selected >&lt;Select Depot&gt;</option>
                        </select>
                    </td>
                </tr>

然后我们有javascript调用第二页(从数据库中检索数据):

// Fill combo with XML data
function populateCombo(par) {
    var currNode;

    XMLID.async = false;

    // Change Data Island source
    strQuery = "Select LocationID, LocationName from Locations where CustomerID='" + par + "' and Active = 1 Order By LocationName";
    XMLID.SRC="/fxdb/common/xmlQuery.asp?strQuery=" + strQuery;

    // Get all "names" from XML data
    objNodeList = XMLID.getElementsByTagName("LocationName");
    objNodeListID= XMLID.getElementsByTagName("LocationID");


    // Fill combo with names
    for (var i=0; i < objNodeList.length; i++) {
        fProcess.depot.options[i]=new Option(objNodeList.item(i).text,objNodeListID.item(i).text);
    }

    // Delete extra entries
    while ( objNodeList.length < fProcess.depot.options.length) {
        fProcess.depot.options[(fProcess.depot.options.length - 1)] = null;
    } 

} 

最后,查询数据库本身的页面。

<%@ Language="VBScript" %>
<%
'  Declare all variables.
Option Explicit
Dim strSql,objRS,objField
Dim sConn, oConn
Dim strName, strValue


' Buffer and output as XML.
Response.Buffer = True
Response.ContentType = "text/xml"

' Start our XML document.
Response.Write "<?xml version=""1.0""?>" & vbCrLf

' Set SQL and database connection string.

set oConn=server.createobject("adodb.connection") 
sConn=Application("Connection")
oConn.Open sConn
strSQL = Request.QueryString("strQuery")

set objRS=oConn.execute(strSQL)

' Output start of data.
Response.Write "<database>" & vbCrLf

' Loop through the data records.
While Not objRS.EOF
    ' Output start of record.
    Response.Write "<record>" & vbCrLf
    ' Loop through the fields in each record.
    For Each objField in objRS.Fields
        strName  = objField.Name
        strValue = objField.Value
        If Len(strName)  > 0 Then strName = Server.HTMLEncode(strName)
        If Len(strValue) > 0 Then strValue = Server.HTMLEncode(strValue)
        Response.Write "<" & strName & ">" & vbCrLf
        Response.Write strValue & vbCrLf 
        Response.Write "</" & strName & ">" & vbCrLf
    Next
    ' Move to next city in database.
    Response.Write "</record>" & vbCrLf
    objRS.MoveNext
Wend

' Output end of data.
Response.Write "</database>" & vbCrLf
%> 

编辑:哎呀!我忘记了最重要的XML数据岛本身 - 在Body标签之后添加它。

<!-- Data Island-->
<XML ID="XMLID"></XML>

答案 2 :(得分:0)

我猜你从“Asp Combobox ajax”中遗漏的这个词是“Cascading”。一个combox中可用项目集取决于在先前的combox或其他字段中选择的值的概念。

在ASP中似乎没有任何好的简单例子。但是,与jquery结合使用,您可以尝试使用此链接jquery.cascade cascading values from forms

这使您只需要创建生成所需简单JSON的ASP页面。