web-dev-qa-db-fra.com

Comment retourner un objet JSON en classique ASP

Je veux retourner un objet JSON en utilisant un script ASP classique (il fait partie d'une AJAX)).

Si je viens d'envoyer la réponse sous forme de texte comme:

response.write("{ query:'Li', suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], data:['LR','LY','LI','LT'] }")

cela fonctionnera-t-il ou ai-je réellement besoin d'une bibliothèque JSON?

Edit: J'essaie d'obtenir le plugin de saisie semi-automatique sur http://www.devbridge.com/projects/autocomplete/jquery/ #howto pour travailler.

javascript:

 $(document).ready(function() {
    var a = $('#txtValue').autocomplete({ 
    serviceUrl:'script.asp',
    minChars:2, 
    maxHeight:400,
    width:300,
    zIndex: 9999,
    deferRequestBy: 0, //miliseconds
    onSelect: function(value, data){ alert('You selected: ' + value + ', ' + data); },
});

ASPIC:

<% 
response.ContentType = "application/json"
response.write("{ query:'Li', suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], data:['LR','LY','LI','LT'] }") 
%>

La saisie semi-automatique ne fonctionne pas. Cela fonctionne si j'utilise un tableau de recherche local comme la recherche: ['janvier', 'février', 'mars', 'avril', 'mai']

Mais il y a un problème avec ajax, ce qui signifie qu'il ne renvoie pas correctement la liste.

14
Flash

Cela semble être une erreur d'analyse du côté client.

Je ne pensais pas que cela ferait une différence, mais il semble que si vous citez tout, y compris les noms de propriété, cela semble fonctionner. Et utilisez des guillemets doubles au lieu de guillemets simples - cela fait apparemment une différence.

N'oubliez pas de doubler vos guillemets doubles (au moins je pense que c'est comme ça que vous le faites dans VBScript - cela fait longtemps).

Alors:

<%
    Response.ContentType = "application/json"
    Response.Write("{ ""query"":""Li"", ""suggestions"":[""Liberia"",""Libyan Arab Jamahiriya"",""Liechtenstein"",""Lithuania""], ""data"":[""LR"",""LY"",""LI"",""LT""] }")
%>
28
Joe Enos

réponse de Joe devrait fonctionner pour vous. Cependant, vous voudrez peut-être regarder aspjson si vous allez produire beaucoup de JSON à partir d'ASP classique.

3
Jon P

Je l'ai fait fonctionner avec le code ci-dessous .... Après avoir doublé les guillemets et mis la chaîne de requête

currQuery= request.querystring("query")
response.expires=-1
Dim rsMain,sqlMain,rettxt,JobOpenToArr
set rsMain= Server.CreateObject("ADODB.Recordset")
rsMain.CursorLocation = adUseClient
sqlMain = "select JobOpenTo FROM Jobs WHERE JobOpenTo LIKE '%"&currQuery & "%' group by JobOpenTo order by JobOpenTo" 
rsMain.Open sqlMain, Session("XXX_CMS")
if Not rsMain.Eof  Then   
              '## build the string
       rettxt = "{query:""" & currQuery & """, suggestions:["

     JobOpenToArr = rsMain.getRows()     
     For i = 0 to UBound(JobOpenToArr,2)

       rettxt = rettxt & """" & JobOpenToArr(0,i) & ""","

     Next    
     '##knock off trailing comma
     rettxt = left(rettxt,len(rettxt)-1)
     rettxt = rettxt & "]}"
     Response.Write rettxt 
3
Richard