Получить классическую переменную ASP из опубликованного JSON - PullRequest
10 голосов
/ 21 апреля 2010

Я пытаюсь отправить JSON через AJAX на страницу классического ASP, которая получает значение, проверяет базу данных и возвращает JSON на исходную страницу.

Я могу опубликовать JSON через AJAX. Я могу вернуть JSON из ASP. Я не могу получить опубликованный JSON в переменную ASP.

POST, который вы используете Request.Form, ПОЛУЧИТЕ, что вы используете 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

Ответы [ 8 ]

2 голосов
/ 04 апреля 2013

Вот решение, которое я использовал в ASP Vbscript с кодом Radium и некоторыми исправлениями:

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)
2 голосов
/ 13 января 2012

Решение alphadogg у меня не сработало, я получил ошибки со строкой bStream.Write requestBody (говоря: «Операция не разрешена в этом контексте».) Это работает для меня и возвращает всю строку запроса. Однако он будет работать только для данных запроса <= 100 КБ, в противном случае вам придется выяснить, как заставить работать метод BinaryRead. </p>

str = Request.Form

(обнаружено от http://msdn.microsoft.com/en-us/library/ms525985%28v=VS.90%29.aspx)

2 голосов
/ 24 декабря 2012

код 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();                                  

До этого я получал "Операция не разрешена в этом контексте". как сообщил Джокин.

1 голос
/ 01 июня 2011

Не знаю, ищите ли вы, но этот ответ может вам помочь. Тем не менее, код для страниц 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
1 голос
/ 23 июня 2010

У меня такая же проблема, но очень скоро я выясняю, как разместить объект json на ASP-сервере.

Вот идея: не проверено. Работай над этим> <. </p>

Разобрать объект json в строку, а затем отправить обратно на сервер (это обычная запись строки)

на стороне ASP, используйте библиотеку JSON для анализа строки обратно в объект.

ссылка на библиотеку JSON http://code.google.com/p/aspjson/

'Я предполагаю, что ppl, пытающийся отправить JSON обратно в asp, должен иметь базовые знания о публикации. Любая дополнительная помощь, пожалуйста, дайте мне знать

1 голос
/ 24 апреля 2010

Вы можете рассмотреть переход с VBScript на JScript (JScript - это то, что Microsoft называет JavaScript).

Почему? Потому что тогда из Classic ASP вы можете делать те же вызовы JSON, что и браузер, и считывать результаты в объекты JavaScript с помощью оператора eval ().

Пэдди сказал: У меня нет ответа, но у вас есть все мое сочувствие ... классическая обработка asp и JSON - звучит как весело.

@ Пэдди: Классический ASP и JSON - это весело, на самом деле это КАК! (Если вы переключаетесь с VBScript и используете JScript.)

Обратите внимание, что вам не нужно выходить из VBScript «холодная индейка», вы все равно можете взаимодействовать между ними в одном и том же 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> <%        

%>  
0 голосов
/ 08 августа 2010

Обычно (новый 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;
}

благодаря комментарию Rasberry @ http://blogs.msdn.com/b/david.wang/archive/2006/07/04/howto-convert-between-jscript-array-and-vb-safe-array.aspx

Обратите внимание, что он может некорректно обрабатывать кодировку. Я не углублялся в то, что означает 201 для типа данных ADO, но он работает.

0 голосов
/ 22 апреля 2010

Вы можете найти все опубликованные параметры с помощью этого кода.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...