2011-11-15 36 views
5

Tôi hoàn toàn bị mất. Tôi đang cố gắng để gửi đến một API trên một máy chủ từ xa từ một trang asp cổ điển sử dụng VBScript. Mã của tôi:Trang ASP cổ điển có thể sử dụng xmlhttp tạo yêu cầu JSON không?

set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") 
xmlhttp.open "POST", vURL, false 
xmlhttp.setRequestHeader "Content-type","application/json" 
xmlhttp.setRequestHeader "Accept","application/json" 
xmlhttp.send "[email protected]&firstname=joe&lastname=smith" 
vAnswer = xmlhttp.responseText 

Tôi nhận được phản hồi rằng yêu cầu không ở định dạng mong muốn. Hỗ trợ kỹ thuật thông báo cho tôi rằng API mong đợi JSON trong phần nội dung bài đăng. Tôi có thể làm điều này từ asp phía máy chủ không?

Trả lời

1

Kiểm tra này ra, nó sẽ giúp bạn làm những gì bạn muốn:

http://code.google.com/p/aspjson/

Chúc may mắn!

+0

Bugget, tôi đã tải xuống phiên bản cũ hơn, nhưng tôi không thấy cách nó có thể được sử dụng để định dạng yêu cầu JSON. Tôi sẽ xem xét lại. – user1048348

+0

@ user1048348 Đó là chính xác những gì nó nhìn vào các ví dụ trong các trang Wiki. Tuy nhiên, câu trả lời của bạn có thể hữu ích hơn nếu bạn đã bao gồm một mẫu mã nhỏ cho OP, thay vì chỉ là một liên kết. – Lankymart

1

Yêu cầu bạn đang gửi không phải là JSON. Hãy thử sử dụng điều này làm người xác thực: JSONLint. Chuck chuỗi JSON của bạn vào đó và nó sẽ cho bạn biết nếu nó hợp lệ hay không. Trong trường hợp trên: [email protected]&firstname=joe&lastname=smith. Nó chắc chắn là không.

Bạn có thể viết JSON bằng tay, ví dụ tôi sẽ viết lại truy vấn của bạn như sau:

{"Email":"[email protected]", "firstname":"joe", "lastname":"smith"}

Tôi hy vọng rằng sẽ giúp. Có, có những thư viện có thể giúp bạn làm điều này (ASPJSON là một trong số họ) nhưng thành thật mà nói tôi thích viết chúng ra (ASP rất khó sử dụng) hoặc viết các hàm của riêng tôi bởi vì tôi biết rằng tôi có thể tin tưởng chúng. Dưới đây là một đoạn mã ví dụ mà tôi đã viết trong ASP có thể tạo chuỗi JSON từ một đối tượng Dictionary. Nó cũng có thể có các mảng bên trong các phần tử từ điển. Thật không may nó không đệ quy vì vậy nó không thể làm mảng của mảng hoặc từ điển của từ điển ... nhưng nó hoạt động yên tĩnh tốt cho đầu vào đơn giản. Được đặt tên là json_encode sau hàm PHP.

Function json_encode(ByVal dic) 
    ret = "{" 
    If TypeName(dic) = "Dictionary" Then 
     For each k in dic 
      Select Case VarType(dic.Item(k)) 
       Case vbString 
        ret = ret & """" & k & """:""" & dic.Item(k) & """," 
       Case Else 
        If VarType(dic.Item(k)) > vbArray Then 
         ret = ret & """" & k & """:[" 
         For x = 0 to Ubound(dic.Item(k), 1) 
          ret = ret & """" & dic.Item(k)(x) & """," 
         Next 
         ret = Left(ret, Len(ret) - 1) 'Trim trailing comma 
         ret = ret & "]," 
        Else 
         ret = ret & """" & k & """:""" & dic.Item(k) & """," 
        End If 
      End Select 
     Next 
     ret = Left(ret, Len(ret) - 1) 'Trim trailing comma 
    End If 
    ret = ret & "}" 
    json_encode = ret 
End Function 
+0

Trong ví dụ trên, bạn đã viết JSON trong dấu ngoặc vuông. Điều này không hợp lệ, nó phải là dấu ngoặc nhọn, ví dụ: {"Email": "[email protected]", "firstname": "joe", "lastname": "smith"} –

+0

@JackAllan duh thanks :) – MikeMurko

3

Bởi vì tôi chạy qua này khi có hiệu quả cố gắng để giải quyết cùng một vấn đề - trong trường hợp của tôi, đăng từ ASP cổ điển đến 2.0 API MailChimp - Tôi muốn echo hồi hướng của liên kết http://code.google.com/p/aspjson/, mà còn lưu ý điều gì đó ít nhất có liên quan trong trường hợp MailChimp. Tôi nghĩ rằng tôi chỉ đơn giản có thể định dạng một chuỗi JSON-tìm và gửi đó, nhưng nó không hoạt động. Tôi đã phải tạo một đối tượng JSON bằng cách sử dụng các phương thức trong thư viện aspjson, và sau đó sử dụng phương thức jsString trong câu lệnh gửi. Vì vậy, đoạn mã (sau khi khai báo thích hợp, bao gồm, vv) sẽ trông giống như sau:

Set objJSON = jsObject() 
objJSON("apikey") = "MY API KEY" 
Set objJSON("email") = jsObject() 
objJSON("email")("email") = strEmail 
Set objXMLhttp = Server.Createobject("MSXML2.ServerXMLHTTP") 
objXMLhttp.open "POST","https://mailchimpurl/2.0/helper/lists-for-email", false 
objXMLhttp.setRequestHeader "Content-type","application/json" 
objXMLhttp.setRequestHeader "Accept","application/json" 
objXMLhttp.send objJSON.jsString 
strResponse = objXMLhttp.responseText 
Set objXMLhttp = Nothing 

Hy vọng rằng sẽ giúp người khác trên đường đi.

2
'Create a function 
Function ASPPostJSON(url) 

'declare a variable 
Dim objXmlHttp 

Set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP") 

'If the API needs userName and Password authentication then pass the values here 
objXmlHttp.Open "POST", url, False, "User123", "pass123" 
objXmlHttp.SetRequestHeader "Content-Type", "application/json" 
objXmlHttp.SetRequestHeader "User-Agent", "ASP/3.0" 

'send the json string to the API server 
objXmlHttp.Send "{""TestId"":,""Test1Id"": 123456,""Test123"": 37,""Type123"": ""Test_String"",""contact"": {""name"": ""FirstName LastName"",""Organization"": ""XYZ"",""phone"":""123456"",""emailAddress"": ""[email protected]""}}" 

'If objXmlHttp.Status = 200 Then 
    ASPPostJSON = CStr(objXmlHttp.ResponseText) 
'end if 

'return the response from the API server 
Response.write(ASPPostJSON) 
Set objXmlHttp = Nothing 

End Function 

'call the function and pass the API URL 
call ASPPostJSON("https://TheAPIUrl.com/") 
+1

Vui lòng cải thiện định dạng bằng cách thụt lề mã với 4 dấu cách. – ByteHamster

+0

Điều này thực sự phải là câu trả lời được chấp nhận. –

Các vấn đề liên quan