Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Classic ASP variable from posted JSON

I'm trying to post JSON via AJAX to a Classic ASP page, which retrieves the value, checks a database and returns JSON to the original page.

I can post JSON via AJAX. I can return JSON from ASP. I can't retrieve the posted JSON into an ASP variable.

POST you use Request.Form, GET you use Request.Querystring. What do I use for JSON?

I have JSON libraries but they only show creating a string in the ASP script and then parsing that. I need to parse JSON from when being passed an external variable.

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 file (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
like image 527
Will Avatar asked Apr 21 '10 10:04

Will


3 Answers

alphadogg's solution didn't work for me, I got errors with the line bStream.Write requestBody (saying "Operation is not allowed in this context.") This seems to work for me, and returns the whole request string. However, it will only work for request data <= 100 KB, otherwise you'll have to work out how to get the BinaryRead method working.

str = Request.Form

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

like image 113
Laurence Dougal Myers Avatar answered Sep 20 '22 13:09

Laurence Dougal Myers


alphadogg's code worked for me, but only after I specified a little more information:

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();                                  

Prior to this I would get "Operation is not allowed in this context." as jjokin reported.

like image 23
kenchilada Avatar answered Sep 17 '22 13:09

kenchilada


Here is the solution that i used in ASP Vbscript with Radium's code and some corrections:

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)
like image 44
CarlosKaval Avatar answered Sep 16 '22 13:09

CarlosKaval