2011-11-15 16 views
5

मैं पूरी तरह से खो गया हूँ। मैं एक क्लासिक एएसपी पेज से दूरस्थ सर्वर पर एक एपीआई पर पोस्ट करने की कोशिश कर रहा हूं जो vbscript का उपयोग करता है। मेरा कोड:क्या xmlhttp का उपयोग कर क्लासिक एएसपी पृष्ठ एक JSON अनुरोध कर सकता है?

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 

मुझे एक प्रतिक्रिया प्राप्त होती है कि अनुरोध अपेक्षित प्रारूप में नहीं है। तकनीकी सहायता मुझे सूचित करती है कि एपीआई पोस्ट बॉडी में जेएसओएन की अपेक्षा करता है। क्या मैं इसे सर्वर-साइड एएसपी से कर सकता हूं?

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

गुड लक:

उत्तर

1

चेक इस बाहर है, यह आप क्या चाहते हैं की मदद करनी चाहिए!

+0

बगेट, मैंने पहले डाउनलोड किया था, लेकिन मुझे नहीं लगता कि इसका उपयोग JSON अनुरोध को प्रारूपित करने के लिए कैसे किया जा सकता है। मैं एक और नजर डालेगा। – user1048348

+0

@ user1048348 यह विक्की पृष्ठों में उदाहरणों को बिल्कुल ठीक करता है। हालांकि, अगर आप केवल एक लिंक के बजाय ओपी के लिए कोड का एक छोटा सा नमूना शामिल करते हैं तो आपका उत्तर अधिक उपयोगी हो सकता है। – Lankymart

1

जो अनुरोध आप भेज रहे हैं वह है ..... JSON नहीं। इसे वैधकर्ता के रूप में उपयोग करने का प्रयास करें: JSONLint। अपने JSON स्ट्रिंग को वहां चक करें और यह आपको बताएगा कि यह मान्य है या नहीं। उपर्युक्त मामले में: [email protected]&firstname=joe&lastname=smith। यह निश्चित रूप से नहीं है।

आपको अपनी ओर से JSON लिख सकते हैं, इस प्रकार, उदाहरण के लिए मैं आपकी क्वेरी को फिर से लिखने होगा:

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

मुझे आशा है कि मदद करता है। हां, ऐसे पुस्तकालय हैं जो आपको ऐसा करने में मदद कर सकते हैं (एएसपीजेसन उनमें से एक है) लेकिन ईमानदार होने के लिए मैं उन्हें खुद लिखना पसंद करता हूं (एएसपी इतना अनावश्यक है) या अपने स्वयं के कार्यों को लिखना क्योंकि मुझे पता है कि मैं उन पर भरोसा कर सकता हूं। यहां एएसपी में लिखा गया कोड का एक उदाहरण टुकड़ा है जो एक शब्दकोश ऑब्जेक्ट से JSON स्ट्रिंग कर सकता है। इसमें शब्दकोश तत्वों के अंदर सरणी भी हो सकती है। दुर्भाग्यवश यह रिकर्सिव नहीं है इसलिए यह सरणी या शब्दकोशों के शब्दकोशों के सरणी नहीं कर सकता ... लेकिन यह सरल इनपुट के लिए शांत काम करता है। PHP फ़ंक्शन के बाद json_encode नामित।

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

ऊपर दिए गए आपके उदाहरण में आपने जेएसओएन को स्क्वायर ब्रैकेट में लिखा है। यह अमान्य है यह घुंघराले ब्रेसिज़ होना चाहिए उदा। {"ईमेल": "[email protected]", "firstname": "joe", "lastname": "smith"} –

+0

@ जैकअलन डुह धन्यवाद :) – MikeMurko

3

क्योंकि मैं इस भर में भाग गया जब प्रभावी रूप से एक ही मुद्दे को हल करने की कोशिश कर - एएसपी क्लासिक से MailChimp 2.0 एपीआई के लिए पोस्टिंग, मेरे मामले में - मैं http://code.google.com/p/aspjson/ लिंक की असहायता गूंज करना चाहता था, लेकिन यह भी MailChimp के मामले में कम से कम प्रासंगिक कुछ ऐसा नोट करें। मैंने सोचा कि मैं बस एक JSON- दिखने वाली स्ट्रिंग को प्रारूपित कर सकता हूं और उसे भेज सकता हूं, लेकिन यह काम नहीं करता है। मुझे एस्पोजन लाइब्रेरी में विधियों का उपयोग करके एक JSON ऑब्जेक्ट बनाना था, और उसके बाद प्रेषण कथन में jsString विधि का उपयोग करना था।

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 

आशा है कि रास्ते में किसी और में मदद करता है: तो कोड स्निपेट (उचित घोषणाओं के बाद, भी शामिल है, आदि) कुछ इस तरह दिखेगा।

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

कृपया 4 रिक्त स्थान के साथ कोड इंडेंट करके फ़ॉर्मेटिंग में सुधार करें। – ByteHamster

+0

यह वास्तव में स्वीकार्य उत्तर होना चाहिए। –