2011-11-15 9 views
5

Tamamen kayboldum. Vbscript kullanan klasik bir asp sayfasından uzak bir sunucuda bir API'ye yayınlamaya çalışıyorum. Kodum:Xmlhttp kullanarak klasik bir ASP sayfası bir JSON isteği yapabilir mi?

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 

Talebin beklenen biçimde olmadığına dair bir yanıt alıyorum. Teknik destek bana API'nin post gövdedeki JSON'u beklediğini bildiriyor. Bunu sunucu tarafı asp'ten yapabilir miyim?

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

İyi şanslar:

cevap

1

Kontrol şuna, bu ne istersen yap yardımcı olacaktır!

+0

Bugget, daha önce indirdim, ancak bir JSON isteğini biçimlendirmek için nasıl kullanılacağını göremiyorum. Başka bir bakacağım. – user1048348

+0

@ user1048348 Bu, Wiki sayfalarındaki örneklere tam olarak baktığı şeydir. Ancak, cevabınız, yalnızca bir bağlantıdan ziyade OP için küçük bir kod örneği eklediyseniz, daha yararlı olabilir. – Lankymart

1

Gönderdiğiniz istek, ..... JSON değil. Bunu bir doğrulayıcı olarak kullanmayı deneyin: JSONLint. JSON dizginizi buraya takın ve geçerli olup olmadığını söyleyecektir. Yukarıdaki durumda: [email protected]&firstname=joe&lastname=smith. Bu kesinlikle değil.

Sen şöyle senin sorgu yeniden olurdu örneğin elle JSON yazabilirsiniz:

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

Bunu size yardımcı olmuştur. Evet, bunu yapmanıza yardımcı olabilecek kütüphaneler var (ASPJSON bunlardan biri) ama dürüst olmak gerekirse, kendime yazmayı tercih ederim (ASP çok hantaldır) ya da kendi işlevlerimi yazıyorum çünkü onlara güvenebileceğimi biliyorum. Burada ASP'de yazdığım ve bir Dictionary nesnesinden bir JSON dizesi oluşturabilen bir kod örneği verilmiştir. Sözlük öğelerinin içinde diziler de olabilir. Ne yazık ki, özyinelemeli değildir, bu yüzden dizilerden oluşan dizilerden veya sözlüklerden oluşan sözlük dizileri yapamazsınız ... fakat basit girişler için sessiz çalışır. PHP işlevinden sonra 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

Yukarıdaki örnekte JSON'u köşeli parantez içinde yazdınız. Bu geçersizdir, kaşlı ayraçlar olmalıdır örn. {"Email": "[email protected]", "firstname": "joe", "lastname": "smith"} –

+0

@JackAllan duh teşekkürler :) – MikeMurko

3

etkili aynı sorunu çözmek için çalışırken bu karşılaştım Çünkü - ASP Classic'ten MailChimp 2.0 API deftere nakil, benim durumumda - Ben http://code.google.com/p/aspjson/ bağlantının yardımseverlik yankı istedim, ama aynı zamanda MailChimp durumunda en az ilgili olan bir şey not alın. JSON görünümlü bir dizeyi biçimlendirebileceğimi ve gönderebileceğimi düşündüm ama işe yaramadı. Aspjson kitaplığındaki yöntemleri kullanarak bir JSON nesnesi oluşturmak ve sonra gönderme deyimindeki jsString yöntemini kullanmak zorundaydım.

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 

Umut yol boyunca başkası yardımcı olur: Yani kod parçacığı (uygun beyanlarına sonra, vb dahil) böyle bir şey olmazdı.

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

Lütfen 4 boşluk ile kod girerek biçimlendirmeyi geliştirin. – ByteHamster

+0

Bu gerçekten kabul edilen cevap olmalı. –