1 (изменено: Евген, 2015-06-27 20:00:38)

Тема: [SOLVED]ASP (classic): Приём JSON data на стороне сервера

Коллеги, приветствую !
Нарисовалась следующая проблема, методом POST отправляю данные на ASP сервер, а каким макаром их на нём принять ?
Страница отправки имеет следующий код

<html>
    <head>
        <title>tst post json to asp srv</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>
<body>
<script type="text/javascript">
var data = new Object();
    data.first="pervyy";
    data.second="vtoroi";


var xhr = new XMLHttpRequest();
xhr.open("POST","jsonsrv.asp", true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.send(JSON.stringify(data));
xhr.onloadend = function () {
  };
</script>

</body>
</html>
Времени не хватает... :-(

2 (изменено: Евген, 2015-06-26 23:16:24)

Re: [SOLVED]ASP (classic): Приём JSON data на стороне сервера

Решено, родил !!!
+ Класс

<!--#include virtual="/aspJSON1.17.asp" -->
<%
Set oJSON = New aspJSON

If Request.TotalBytes > 0 Then
    Dim lngBytesCount
        lngBytesCount = Request.TotalBytes
    jsontxt=BytesToStr(Request.BinaryRead(lngBytesCount))

Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="c:\util\json.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.WriteLine jsontxt

oJSON.loadJSON(jsontxt)
objFile.WriteLine oJSON.data("first")
objFile.WriteLine oJSON.data("second")
objFile.Close



End If

Function BytesToStr(bytes)
    Dim Stream
    Set Stream = Server.CreateObject("Adodb.Stream")
        Stream.Type = 1 'adTypeBinary
        Stream.Open
        Stream.Write bytes
        Stream.Position = 0
        Stream.Type = 2 'adTypeText
        Stream.Charset = "iso-8859-1"
        BytesToStr = Stream.ReadText
        Stream.Close
    Set Stream = Nothing
End Function
%>
Времени не хватает... :-(

3

Re: [SOLVED]ASP (classic): Приём JSON data на стороне сервера

Я бы наверное так сделал:


<%@Language="VBScript" CodePage="1251" %>
<%

Option Explicit

Main

Sub Main()
    If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then
        ShowForm
        Exit Sub
    End if
    Response.Write "field1: " & Request("field1") & vbCrlf & "field2: " & Request("field2")
End Sub

Sub showForm()
%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="Windows-1251">
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    </head>
    <body>
        <input id="field1" type="text" value="1">
        <input id="field2" type="text" value="2">
        <button id="btnSend">send</button>
        <script type="text/javascript">
            $("#btnSend").click(function () {
                $.ajax({
                    type: "POST",
                    url: "test.asp",
                    data: {"field1": field1.value, "field2": field2.value},
                    cache: false,
                    success: function(response){
                        alert(response);
                    },
                    error: function(jqXHR, textStatus, errorThrown){
                        alert('Error: ' + textStatus);
                    }
                });
                return false;
            });
        </script>
    </body>
</html>
<%
End Sub
%>
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

4 (изменено: Евген, 2015-07-09 14:02:46)

Re: [SOLVED]ASP (classic): Приём JSON data на стороне сервера

Задание усложняется !
Вот такая строка JSON:

[{"prodID":"2","prodName":"тестовое название N1","prodUnit":"цукп","prodPrice":"1000.25","Quantity":5,"Discount":"7","RowTotal":"4651.16","cliID":"4","purDate":"16.07.2015"},{"prodID":"4","prodName":"тестовое название №12","prodUnit":"укерук","prodPrice":"125.25","Quantity":7,"Discount":"9","RowTotal":"797.84"},{"prodID":"5","prodName":"му-хрю","prodUnit":"тонны","prodPrice":"152.25","Quantity":6,"Discount":"4","RowTotal":"876.96"}]

массив из 3-х объектов, нужно принять на стороне ASP сервера и данные сделать доступными на VBScript'е

Времени не хватает... :-(

5

Re: [SOLVED]ASP (classic): Приём JSON data на стороне сервера

Один из вариантов. Так как ты говорил, что на серваке юзаешь VBScript, то кусок серверного кода собрал на VBScript, но лучше конечно и его сделать на JScript. Как-то культурнее. )


<%@Language="VBScript" CodePage="1251" %>
<script language="JavaScript" runat="server" src="json2.js"></script>
<script language="VBScript" runat="server">
    script_onload()
</script>
<%

Option Explicit

Sub script_onload()
    If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then
        ShowForm
        Exit Sub
    End if
    Dim JSONData
    Set JSONData = JSON.parse(Request("JSONData"))
    Response.Write "prodID: " & JSONData.[0].prodID & vbCrlf 'Request.Form '"field1: " & Request("field1") & vbCrlf & "field2: " & Request("field2")
    Response.Write "prodName: " & JSONData.[0].prodName
End Sub

Sub showForm()
%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="Windows-1251">
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
        <!--https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js-->
        <script type="text/javascript" src="json2.js"></script>
    </head>
    <body>
        <input id="field1" type="text" value="1">
        <input id="field2" type="text" value="2">
        <button id="btnSend">send</button>
        <script type="text/javascript">
            $("#btnSend").click(function () {
                var JSONData = [{ "prodID": "2", "prodName": "тестовое название N1", "prodUnit": "цукп", "prodPrice": "1000.25", "Quantity": 5, "Discount": "7", "RowTotal": "4651.16", "cliID": "4", "purDate": "16.07.2015" }, { "prodID": "4", "prodName": "тестовое название №12", "prodUnit": "укерук", "prodPrice": "125.25", "Quantity": 7, "Discount": "9", "RowTotal": "797.84" }, { "prodID": "5", "prodName": "му-хрю", "prodUnit": "тонны", "prodPrice": "152.25", "Quantity": 6, "Discount": "4", "RowTotal": "876.96" }]
                $.ajax({
                    type: "POST",
                    url: "test.asp",
                    data: {"JSONData":JSON.stringify(JSONData)},
                    cache: false,
                    success: function(response){
                        alert(response);
                    },
                    error: function(jqXHR, textStatus, errorThrown){
                        alert('Error: ' + textStatus);
                    }
                });
                return false;
            });
        </script>
    </body>
</html>
<%
End Sub
%>
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

6

Re: [SOLVED]ASP (classic): Приём JSON data на стороне сервера

С учётом переделки серверной части на JS, можно наверное вот так:


<%@Language="JavaScript" CodePage="1251" %>
<script language="JavaScript" runat="server" src="json2.js"></script>
<script language="JavaScript" runat="server">
    script_onload()
</script>
<%

function script_onload(){
    if (Request.ServerVariables("REQUEST_METHOD") != "POST") {
        showForm()
        return
    }
    var JSONData = JSON.parse(Request("JSONData"))
    Response.Write('prodID: ' + JSONData[0].prodID + '\n') //'Request.Form '"field1: " & Request("field1") & vbCrlf & "field2: " & Request("field2")
    Response.Write('prodName: ' + JSONData[0].prodName)
}

function showForm() {
%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="Windows-1251">
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
        <!--https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js-->
        <script type="text/javascript" src="json2.js"></script>
    </head>
    <body>
        <button id="btnSend">send</button>
        <script type="text/javascript">
            $("#btnSend").click(function () {
                var JSONData = [{ "prodID": "2", "prodName": "тестовое название N1", "prodUnit": "цукп", "prodPrice": "1000.25", "Quantity": 5, "Discount": "7", "RowTotal": "4651.16", "cliID": "4", "purDate": "16.07.2015" }, { "prodID": "4", "prodName": "тестовое название №12", "prodUnit": "укерук", "prodPrice": "125.25", "Quantity": 7, "Discount": "9", "RowTotal": "797.84" }, { "prodID": "5", "prodName": "му-хрю", "prodUnit": "тонны", "prodPrice": "152.25", "Quantity": 6, "Discount": "4", "RowTotal": "876.96" }]
                $.ajax({
                    type: "POST",
                    url: "test.asp",
                    data: {"JSONData":JSON.stringify(JSONData)},
                    cache: false,
                    success: function(response){
                        alert(response);
                    },
                    error: function(jqXHR, textStatus, errorThrown){
                        alert('Error: ' + textStatus);
                    }
                });
                return false;
            });
        </script>
    </body>
</html>
<%
}
%>
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !