如何在经典ASP中返回JSON对象

时间:2011-08-08 02:32:38

标签: ajax json asp-classic

我想使用经典的ASP脚本返回一个JSON对象(它是AJAX请求的一部分)。

如果我只是像以下那样发送响应:

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

这会有用,还是我真的需要一个JSON库?

修改:我正试图让http://www.devbridge.com/projects/autocomplete/jquery/#howto的自动完成插件正常工作。

的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); },
});

ASP:

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

自动填充不起作用。如果我使用像这样的本地查找数组,它可以工作     查找:['1月','2月','3月','4月','5月']

但是ajax有问题意味着它没有正确返回列表。

3 个答案:

答案 0 :(得分:26)

它似乎是客户端的解析错误。

我不认为这会有所作为,但看起来如果你引用一切,包括属性名称,它似乎有效。并使用双引号而不是单引号 - 这显然有所作为。

请记住加倍双引号(至少我认为你是如何在VBScript中做的 - 已经很长时间了。)

所以:

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

答案 1 :(得分:3)

Joe's answer应该适合你。但是,如果要从经典ASP中输出大量JSON,您可能需要查看aspjson

答案 2 :(得分:3)

我让它使用下面的代码.... 将引号加倍并放入查询字符串

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