2011-11-15 10 views
5

私は完全に失われています。私はvbscriptを使用する古典的なASPページからリモートサーバー上のAPIに投稿しようとしています。私のコード:xmlhttpを使用した従来のASPページで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 

私は、要求が期待されたフォーマットではないという応答を受け取ります。テクニカルサポートでは、APIがJSONをポスト本体に期待していることがわかります。私はこれをサーバー側ASPから行うことはできますか?

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

幸運:

答えて

1

チェックこのうち、それはあなたが欲しいものを行うことに役立つはず!

+0

バグを以前ダウンロードしましたが、JSONリクエストをフォーマットするためにどのように使用できるか分かりません。もう一度見てみましょう。 – user1048348

+0

@ user1048348これは、Wikiページの例を見ているのとまったく同じです。しかし、あなたの答えは単なるリンクではなく、OPのための小さなコードのサンプルを含んでいたほうが助かりました。 – Lankymart

1

送信するリクエストは.....ではなくJSONです。これをバリデーターとして使用してみてください:JSONLint。あなたのJSON文字列をそこにチャッキングすると、有効かどうかがわかります。上記の場合:[email protected]&firstname=joe&lastname=smith。それは間違いない。

次のように私はあなたのクエリを書き直すでしょう例えば、手でJSONを書き込むことができます。

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

私はそれが役に立てば幸い。はい、あなたがこれを行うのを助けるライブラリがあります(ASPJSONもその1つですが)私がそれらを信頼できることを知っているので、私は自分自身を書くことが好きです(ASPはとても扱いにくいです)。ここでは、ASPでJSON文字列をDictionaryオブジェクトから作成できるコードのサンプルを示します。辞書要素内に配列を持つこともできます。残念ながら、それは再帰的ではないので、辞書の配列や辞書の配列を行うことはできません...しかし、単純な入力に対しては静かに動作します。 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

上記の例では、角括弧でJSONを記述しています。これは無効です。中括弧などにする必要があります。 {"Email": "[email protected]"、 "firstname": "joe"、 "lastname": "smith"} –

+0

@JackAllan duhありがとう:) – MikeMurko

3

効果的に同じ問題を解決しようとすると、私は、この全体で実行されていたため - ASPクラシックからMailChimp 2.0 APIへの投稿、私の場合には - 私はhttp://code.google.com/p/aspjson/リンクの有用性をエコーし​​たかったが、また、 MailChimpの場合に少なくとも関連するものを書き留めておきます。私は単純にJSONのような文字列をフォーマットして送信できると思ったが、うまくいかなかった。 aspjsonライブラリのメソッドを使用してJSONオブジェクトを作成してから、sendステートメントで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

これは本当に受け入れられる答えでなければなりません。 –

関連する問題