【问题标题】:How to return a JSON object in classic ASP如何在经典 ASP 中返回 JSON 对象
【发布时间】:2011-08-08 02:32:38
【问题描述】:

我想使用经典的 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); },
});

平均售价:

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

自动完成功能不起作用。如果我使用像这样的本地查找数组,它会起作用 查找:['一月','二月','三月','四月','五月']

但是 ajax 有问题,这意味着它不能正确返回列表。

【问题讨论】:

  • 你真的试过了吗?试一试,你有什么损失?
  • 我试过了,不行哈哈。我只是不确定这是否是原因。我正在尝试让自动完成插件 (devbridge.com/projects/autocomplete/jquery/#howto) 工作
  • 我知道你已经解决了你的问题,但这里有一个链接来验证你的 JSON 并确保不是它导致问题:jsonlint.com

标签: ajax json asp-classic


【解决方案1】:

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

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

记得把你的双引号加倍(至少我认为你在 VBScript 中是这样做的——已经很久了)。

所以:

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

【讨论】:

  • 我不明白为什么那行不通。只需确保将内容类型设置为“application/json”即可。
  • 在插件的文档中,它说:“为 Ajax 自动完成提供数据的网页将接收带有查询字符串 ?query=Li 的 GET 请求,并且它必须返回以下格式的 JSON 数据”和然后在我的问题中给出字符串。如果我只是 response.write 如图所示,它不应该用于测试吗?
  • 我添加了 response.ContentType = "application/json" 但它仍然无法正常工作:(
  • 打败我。是的,双引号可以在 vbScript 中转义它们。
  • 不是解析错误。 JSON grammar 指定属性名是字符串,字符串必须用双引号引起来。
【解决方案2】:

我让它与下面的代码一起工作...... 加倍引号并放入查询字符串后

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多