S'il vous plaît pouvez-vous me suggérer un exemple en ASP classique et ajax pour faire un combo dépendant?Combo dépendant en ASP classique et Ajax?
Répondre
Bien avant que le concept d'AJAX ne soit formalisé, j'utilisais une technique appelée XML Data Islands pour obtenir ce type de fonctionnalité. De toute évidence, il existe un certain nombre de frameworks AJAX et de scripts qui peuvent aboutir à des résultats similaires, mais ce n'est que la technique éprouvée que j'ai utilisée pendant des années dans mes anciennes applications.
Je n'arrive pas à trouver rapidement les articles appropriés, j'ai donc déterré un peu de mon ancien code. Fondamentalement, lorsque vous définissez la valeur du contrôle parent, vous exécutez du javascript qui envoie une requête à une page ASP distincte. Cette page interroge la base de données pour déterminer les données qui seront utilisées pour remplir le contrôle enfant.
Cette deuxième page renvoie les résultats sous forme de fichier XML, qui est stocké et manipulé dans une zone de données XML dans votre page principale. Le javascript appelant analyse ensuite le code XML renvoyé et remplit le contrôle enfant.
Tout d'abord, nous avons les appels javascript de la commande primaire:
<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>
Ensuite, nous avons le javascript qui fait appel à la deuxième page (qui récupère les données de la 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;
}
}
Et enfin, la page qui interroge la base de données elle-même.
<%@ 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
%>
Editer: Oups! J'ai oublié le très important XML Data Island - ajoutez ceci après votre balise Body.
<!-- Data Island-->
<XML ID="XMLID"></XML>
Je devine que le mot que vous avez manqué de "Asp Combobox ajax" est "en cascade". Le concept où l'ensemble des éléments disponibles dans une combox dépend d'une valeur sélectionnée dans une précédente combox ou dans un autre champ.
Il ne semble y avoir aucun bon exemple simple dans ASP seul. Cependant, en combinaison avec jquery, vous pouvez essayer ce lien, jquery.cascade cascading values from forms.
Cela vous laisse seulement besoin de créer les pages ASP qui génèrent le simple JSON requis.
Oui Anthony, je cherche "Cascading combobox"! Le concept est le suivant, mais je souhaite trouver un exemple de code dans asp classique, pas dans asp.net – Davide
@Davide: Oups n'a pas remarqué que le contenu de la page était ASP.NET pas ASP. Il ne semble pas y avoir d'exemples simples dans Classic. – AnthonyWJones
Vous pourriez être intéressé par le solution using ajaxed.
- 1. global.asax et ASP classique?
- 2. Datagrids et ASP classique
- 3. Bibliothèque AJAX préférée pour ASP classique?
- 4. Authentification ASP et ASP.Net classique
- 5. Consommez webservice en ASP classique
- 6. chaîne concaténer en asp classique
- 7. DotNetOpenAuth + ASP classique + oAuth
- 8. Cours accéléré ASP classique
- 9. System.Net.HttpWebRequest sous ASP classique?
- 10. Ingres avec ASP classique
- 11. Développement ASP classique
- 12. Fonction ASP récursive classique
- 13. nusoap, côté serveur (php) et côté client ASP classique
- 14. SqLite et ASP classique avec JScript
- 15. Références dans ASP classique
- 16. Eclipse - Plugin ASP classique
- 17. get_included_files dans ASP classique?
- 18. Cookie.HTTPOnly dans ASP classique
- 19. Mail Envoyer ASP classique
- 20. Conversion ASP classique en ASP.NET 2.0
- 21. Impossible d'écrire le fichier en ASP classique
- 22. asp classique persistent classes personnalisées en session
- 23. comment utiliser gzip en ASP classique
- 24. Réaffecter un tableau en ASP classique
- 25. Cross XMLHttpRequest domaine en ASP classique
- 26. PHP Combo Box AJAX Refresh
- 27. Implémentation AJAX pour ASP et ASP.NET hybride
- 28. fonction surchargée en asp classique JScript
- 29. ASP classique: server.CreateObject pas pris en charge
- 30. Response.Flush - événement OnFlush en ASP classique?
Remarque Les îlots XML sont un concept IE uniquement, mais le principe général peut être appliqué en utilisant XmlHTTPRequest. – AnthonyWJones
Bonjour CJM, merci beaucoup ... c'est exactement ce que je cherchais ... mais ça me donne cette erreur javascript: "XMLID n'est pas défini" ... que puis-je faire? – Davide
AH désolé - voir ci-dessus. – CJM