簡體   English   中英

如何將客戶端AJAX轉換為經典的ASP服務器端邏輯以從api獲取JSON

[英]How to convert client-side AJAX to classic ASP server-side logic to get JSON from api

所以我有一個使用客戶端jquery和AJAX的JSON api請求。 不幸的是,由於有關令牌的安全問題,另一個api堅持要從服務器完成此操作。 我有點難過。 首先,我從客戶端JavaScript進行的工作如下:

$.getJSON("https://api.xyz.com/mytoken/specificargument",function(data){...})

然后,該函數使用JSON字段(或稱為屬性?)將數據填充為data.field1,data.field2等。然后,使用生活在{...}中的jquery代碼將它們放入相應的輸入中。 非常簡單。

我已經讀到可以在服務器上完成此操作(即獲取JSON字符串,而不進行解析)。

Set objJSON = jsObject()
objJSON("apikey") = "mytoken"
Set objJSON("arg1") = jsObject()
objJSON("arg1")("arg1") = "specificargument"
set objXMLhttp = Sever.Createobject("MSXML2.ServerXMLHTTP")
objXMLhttp.open "POST","https://api.abc.com", false
objXMLhttp.setRequestHeader "Content-type","application/json"
objXMLhttp.setRequestHeader "Accept","application/json"
objXMLhttp.send objJSON.jsString
strResponse = objXMLhttp.responseText
Set objXMLhttp = Nothing

因此,這非常有用,除了帖子中說我需要使用“適當的聲明,包含等”。 因此,我認為找到它們很簡單,但是查詢經典的ASP JSON會產生令人困惑的結果。 有人可以幫忙嗎?

  1. 我該怎么做才能正確使用上述的aspjson庫?
  2. 我如何通過上面的“ specificargument”。 我寫的東西有點混亂,我確定是不正確的。 在客戶端,令牌和參數是查詢字符串的一部分。 jsObject如何工作?

謝謝。

您發布的示例代碼似乎正在使用aspjson-基於VBScript的ASP服務器技術庫的JSON序列化程序 該語句中的一個關鍵是“ JSON Serializer” ,它只會從對象到字符串進行序列 ,而不會反過來使它在大多數情況下變得毫無用處。

這純粹是我的觀點,但是可以很好地實現這兩個功能的庫是JSON對象類By RCDMK GitHub頁面上的示例非常簡單,但是在此站點上也有一些用法示例。

這是在ASP頁面中使用它的快速示例。

<% Option Explicit %>
<!-- #include virtual="/scripts/jsonObject.class.asp" -->
<%
Dim JSON, parsedJSON
Dim jsonString: jsonString = "[{ ""strings"" : ""valorTexto"", ""numbers"": 123.456, ""arrays"": [1, ""2"", 3.4, [5, 6, [7, 8]]], ""objects"": { ""prop1"": ""outroTexto"", ""prop2"": [ { ""id"": 1, ""name"": ""item1"" }, { ""id"": 2, ""name"": ""item2"", ""teste"": { ""maisum"": [1, 2, 3] } } ] } }]"

Call init()

Sub init()
  Response.LCID = 2057
  Set JSON = New JSONobject
  Call Response.Write("<h2>JSON String</h2>")
  Call Response.Write("<pre>" & jsonString & "</pre>")
  Call Test_ParseJSON()
  Call Test_WriteJSON()
End Sub

Sub Test_ParseJSON()
  Call Response.Write("<h2>Parsing JSON</h2>")
  Set parsedJSON = JSON.Parse(jsonString)
  Call Response.Write("<pre>parsedJSON(0).Value(""objects"").Value(""prop1"") = """ & parsedJSON(0).Value("objects").Value("prop1") & """</pre>")
End Sub

Sub Test_WriteJSON()
  Call Response.Write("<h2>Writing JSON</h2>")
  Call parsedJSON(0).Value("objects").Change("prop1", "hello test")
  Call Response.Write("<pre>" & parsedJSON.Serialize() & "</pre>")
End Sub
%>

輸出:

JSON字串

[{ "strings" : "valorTexto", "numbers": 123.456, "arrays": [1, "2", 3.4, [5, 6, [7, 8]]], "objects": { "prop1": "outroTexto", "prop2": [ { "id": 1, "name": "item1" }, { "id": 2, "name": "item2", "teste": { "maisum": [1, 2, 3] } } ] } }]

解析JSON

parsedJSON(0).Value("objects").Value("prop1") = "outroTexto"

編寫JSON

[{"strings":"valorTexto","numbers":123.456,"arrays":[1,"2",3.4,[5,6,[7,8]]],"objects":{"prop1":"hello test","prop2":[{"id":1,"name":"item1"},{"id":2,"name":"item2","teste":{"maisum":[1,2,3]}}]}}]

從原始海報來看:通常情況下,我的情況可能不會很好地概括,但是由於我找到了一個非常簡單的解決方案,因此將其張貼在這里,以防其他人找到它。

首先,對於此特定的api,令牌和其他參數在查詢字符串中傳遞,方法是GET,而不是POST。 因此.send命令沒有參數。 這就是返回JSON字符串所需的全部工作。 從而:

set objXMLhttp = Server.Createobject("MSXML2.ServerXMLHTTP")
objXMLhttp.open "GET","https://api.abc.com/argument1/?token=mysecret", false
objXMLhttp.setRequestHeader "Content-type","application/json"
objXMLhttp.setRequestHeader "Accept","application/json"
objXMLhttp.send
strResponse = objXMLhttp.responseText

順便說一句,如果我HAD需要發送JSON格式的參數(如其他人所指出的那樣),則通常(對於簡單結構)很容易簡單地創建它而不是使用第三方庫。 (例如,來自此站點上的帖子:{“ Email”:“ asdf@hotmail.com”,“ firstname”:“ joe”,“ lastname”:“ smith”})。

最后,就像創建簡單的JSON字符串一樣容易,返回的數據(如果簡單)也可以輕松地進行解析。 就我而言,返回值始終在開頭和結尾處都有一個大括號,然后是一個簡單的以逗號分隔的冒號對列表。 可以很容易地將其拆分為vbscript數組(請記住,我的文章是針對經典ASP的),並按如下方式解析為字典(ParseJSON)(請注意,我需要去除所有引號):

strResponse = Left(strResponse,Len(strResponse)-1) ' remove right-brace
strResponse = Right(strResponse,Len(strResponse)-1)
Dim ParseJSON
Set ParseJSON = CreateObject("Scripting.Dictionary")
ParseJSON.CompareMode = vbTextCompare
ArryJSON = Split(strResponse,",")
' parse into a dictionary
For Each jPair In ArryJSON
    ' take jPair apart and insert into dictionary
    onePair = Split(jPair,":")
    aa = onePair(0)
    aa = Left(aa,Len(aa) - 1) ' remove quotation mark
    aa = Right(aa,Len(aa) - 1)
    bb = onePair(1)
    bb = Left(bb,Len(bb) - 1)
    bb = Right(bb,Len(bb) - 1)
    ParseJSON.Add aa,bb
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM