从张贴的JSON获取经典的ASP变量

问题描述:

我想通过AJAX发布JSON到经典ASP页面,该页面检索值,检查数据库并将JSON返回到原始页面。从张贴的JSON获取经典的ASP变量

我可以通过AJAX发布JSON。我可以从ASP返回JSON。我无法将发布的JSON检索到ASP变量中。

POST你使用Request.Form,GET你使用Request.Querystring。我用什么JSON?

我有JSON库,但他们只显示在ASP脚本中创建一个字符串,然后解析它。我需要从传递外部变量时解析JSON。

的Javascript

var thing = $(this).val(); 

$.ajax({ 
     type: "POST", 
     url: '/ajax/check_username.asp', 
     data: "{'userName':'" + thing + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     cache: false, 
     async: false, 
     success: function() { 
      alert('success'); 
     } 
}); 

ASP文件(check_username.asp)

Response.ContentType = "application/json" 
      sEmail = request.form() -- THE PROBLEM 

      Set oRS = Server.CreateObject("ADODB.Recordset") 
      SQL = "SELECT SYSUserID FROM dbo.t_SYS_User WHERE Username='"&sEmail&"'" 
      oRS.Open SQL, oConn 
      if not oRS.EOF then 
      sStatus = (new JSON).toJSON("username", true, false) 
      else 
      sStatus = (new JSON).toJSON("username", false, false) 
     end if 
response.write sStatus 
+0

,但你有我非常同情......传统的ASP和JSON处理 - 听起来很好玩。 – Paddy 2010-04-21 11:02:17

+0

这很好奇......你确定它不是POST或GET,JSON发出?!你试过用Alex的例子来验证它吗? – cregox 2010-08-10 17:20:06

+3

@ Paddy:经典的ASP仍然帮助我的家人把食物放在盘子上。就像COBOL一样,它还没有死。 ;-) – Taptronic 2011-01-03 03:30:54

你可以找到通过这个代码的所有发布的参数。

FUNCTION getQueryString() 
    dim queryLink, queryItemName 
    queryLink = "" 
    On error Resume Next 
    For each queryItemName in Request.QueryString 
     Execute(queryItemName & " = stripQuery(Request.QueryString(""" & queryItemName & """))") 
     queryLink = queryLink & "&" & queryItemName & "=" & Request.QueryString(queryItemName) 
    Next 
    For each queryItemName in Request.Form 
     Execute(queryItemName & " = stripQuery(Request.Form(""" & queryItemName & """))") 
     queryLink = queryLink & "&" & queryItemName & "=" & Request.Form(queryItemName) 
    Next 
    On Error Goto 0 
    getQueryString = queryLink 
END FUNCTION 

response.write getQueryString() 
+0

问题是,当JSON发布到传统的ASP页面时,它不会将它解析到Form对象中。同样,如果你在GET中没有将它绑定到参数。 – alphadogg 2011-06-01 12:27:56

你可能会考虑从VBScript切换到JScript(JScript是微软调用JavaScript的东西)。

为什么?因为在Classic ASP中,您可以执行浏览器可以执行的相同JSON调用,并使用eval()语句将结果读入JavaScript对象。

Paddy Said: 我没有一个答案,但你有我的每一个同情......经典的ASP和JSON处理 - 听起来很有趣。

@ Paddy:经典的ASP和JSON很有趣,实际上它是ROCKS! (如果您从VBScript切换并使用JScript。)

请注意,您不必退出VBScript cold-turkey,仍然可以在相同的ASP文件中在两者之间进行互操作,但如果首先声明JScript,则需要将VBScript限制为SUB或函数,反之亦然,否则不可预知的事情可能发生。

这里就是我在谈论的一个简单的例子:

<%@ LANGUAGE="JScript" %> 
<% 

var days = VBDateDiff("d", "4/10/2010", "5/3/2010"); 
Response.write("JScript Calling VBScript function: days = " + days); 


%> <script language="VBScript" runat="server"> 
function VBDateDiff(units, datebefore, dateafter) 
    VBDateDiff = CStr(DateDiff(units, datebefore, dateafter)) 
end function 

function VBDateAdd(units, nUnits, theDate) 
    Response.write("<BR>VBDateAdd units=" & units & ", nUnits=" & nUnits & ", theDate=" & theDate) 
    VBDateAdd = CStr(DateAdd(units, nUnits, theDate)) 
    Response.write(", VBDateAdd=" & VBDateAdd) 
end function 
</script> <%   

%> 
+1

做一个json字符串的服务器端评估是不是真的很危险? – Ben 2010-06-22 23:17:24

+1

是的,但您如何访问已发布的数据? – alphadogg 2011-06-01 12:29:01

我有同样的问题,但很快我弄清楚如何发布JSON对象发送给ASP服务器。

这里有个想法:没有测试。努力工作> <。

解析JSON对象转换成字符串然后张贴回服务器。(这是一个典型的字符串张贴)

在ASP端,使用JSON库来解析字符串回对象。

链接,JSON库 http://code.google.com/p/aspjson/

“我认为PPL试图JSON后回ASP应具备的基本知识发布。任何进一步的帮助,请让我知道

通常(新的VBArray(ARR).toArray())应该在一个SafeArray上工作,这是Request.BinaryRead返回的内容。但事实并非如此。我发现这个解决方案,我修改:

function GetRawRequestData() { 
    var byteCount = Request.TotalBytes; 
    var binary = Request.BinaryRead(byteCount) 
    var reader = Server.CreateObject('ADODB.Recordset'); 
    reader.Fields.Append('x', 201, byteCount); 
    reader.Open(); 
    reader.AddNew(); 
    reader.Fields(0).AppendChunk(binary); 
    reader.update(); 
    return reader.Fields(0).Value; 
} 

由于树莓的评论@http://blogs.msdn.com/b/david.wang/archive/2006/07/04/howto-convert-between-jscript-array-and-vb-safe-array.aspx

注意,它可能无法正确处理编码。我没有深入了解ADO数据类型的意义,但它的工作原理。

不知道你是否仍在寻找,但这answer可能会帮助你。但是,该代码适用于ASP.NET页面。经典的ASP模拟是:

byteCount = Request.TotalBytes 
    requestBody = Request.BinaryRead(byteCount) 

然后,你可能想把它变成一个字符串来解析/使用。您可以使用ADODB.Stream进行转换。

Set bStream= CreateObject("ADODB.Stream") 
    bStream.Open 
    bStream.Write requestBody 
    bStream.Position = 0 
    bStream.Type = adTypeText 
    str = bStream.ReadText 

alphadogg的解决方案并没有为我工作,我得到了错误与线bStream.Write requestBody(说“操作无法在这种情况下不允许的。”)这似乎为我工作,并返回整个请求字符串。但是,它仅适用于请求数据< = 100 KB,否则您必须弄清楚如何使BinaryRead方法正常工作。

str = Request.Form 

(从http://msdn.microsoft.com/en-us/library/ms525985%28v=VS.90%29.aspx发现)

alphadogg的代码为我工作,但只有在我指定的多一点信息:

bytecount = Request.TotalBytes 
bytes = Request.BinaryRead(bytecount) 

Set stream = Server.CreateObject("ADODB.Stream"); 
stream.Type = 1; // adTypeBinary    
stream.Open();         
stream.Write(bytes); 
stream.Position = 0;        
stream.Type = 2; // adTypeText     
stream.Charset = "utf-8";       
Set s = stream.ReadText();      
stream.Close();         

在此之前,我会得到“不允许操作在这方面。“正如jjokin报道的那样。

这里是我在ASP VBScript中使用镭代码解决方案和一些更正:我没有答案

bytecount = Request.TotalBytes 
bytes = Request.BinaryRead(bytecount) 

Set stream = Server.CreateObject("ADODB.Stream") 
    stream.Type = 1 'adTypeBinary    
    stream.Open()         
     stream.Write(bytes) 
     stream.Position = 0        
     stream.Type = 2 'adTypeText     
     stream.Charset = "utf-8"      
     s = stream.ReadText() 'here is your json as a string     
    stream.Close() 
Set stream = nothing 

Response.write(s)