2009-10-27 6 views
2

제발 당신이 나에게 고전적인 ASP와 아약스의 예를 제안 해 의존적 인 콤보를 만들 수 있습니까?종속 콤보?

답변

1

AJAX의 개념이 공식화되기 오래 전에이 기능을 구현하기 위해 XML Data Islands이라는 기술을 사용했습니다. 분명히 유사한 결과를 얻을 수있는 AJAX 프레임 워크와 스크립트가 많이 있지만, 이것은 내가 지난 몇 년 동안 레거시 애플리케이션에서 사용해 왔던 테스트를 거친 기술 일뿐입니다.

나는 적당한 기사를 빨리 찾을 수 없기 때문에, 나는 나의 오래된 코드를 파 냈다. 기본적으로 부모 컨트롤의 값을 설정하면 별도의 ASP 페이지에 요청을 보내는 자바 스크립트를 실행합니다. 이 페이지는 자식 컨트롤을 채우는 데 사용할 데이터를 결정하기 위해 DB를 쿼리합니다.

이 두 번째 페이지는 결과를 XML로 반환합니다.이 결과는 기본 페이지의 XML Data Island에 저장되고 조작됩니다. 그런 다음 호출하는 javascript는 반환 된 XML을 파싱하고 자식 컨트롤을 채 웁니다.

먼저 우리는 기본 컨트롤에서 자바 스크립트 호출이 : 그럼

<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> 

우리가합니다 (DB에서 데이터를 검색) 두 번째 페이지를 호출하게 자바 스크립트 :

// 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; 
    } 

} 

마지막으로 DB 자체를 쿼리하는 페이지입니다.

<%@ 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> 
+0

참고 XML 아일랜드는 IE 전용 개념이지만 XmlHTTPRequest를 사용하여 일반 원칙을 적용 할 수 있습니다. – AnthonyWJones

+0

안녕하세요, CJM, 정말 고마워요 ... 정확히 내가 뭘 찾고 있었는지 ...하지만 내게이 자바 스크립트 오류 준다 : "XMLID가 정의되지 않았습니다"... 어떻게해야합니까? – Davide

+0

AH 죄송합니다. 위를 참조하십시오. – CJM

0

"Asp Combobox ajax"에서 누락 된 단어가 "계단식"이라고 생각합니다. 하나의 combox에서 사용할 수있는 항목 집합이 이전 combox 또는 다른 필드에서 선택한 값에 따라 달라지는 개념.

ASP만으로는이 간단한 간단한 예제가없는 것 같습니다. 그러나 jquery와 함께이 링크를 시도해 볼 수 있습니다 (jquery.cascade cascading values from forms).

이렇게하면 필요한 간단한 JSON을 생성하는 ASP 페이지 만 만들면됩니다.

+0

예 안토니, "계단식 콤보 박스"를 찾고 있습니다! 개념은 이것입니다. 그러나 asp.net이 아닌 classic ASP에서 코드 예제를 찾고 싶습니다. – Davide

+0

@Davide : 페이지의 내용이 ASP가 아닌 ASP.NET임을 알지 못했습니다. 이것에 대한 간단한 예가 Classic에는없는 것 같습니다. – AnthonyWJones