请你在经典的asp和ajax中建议我做一个依赖组合的例子吗?
答案 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 ><Select Depot></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页面。