2008-11-21 13 views
7

के साथ विफल रहता है नीचे दिया गया कोड काम करता है। लेकिन अगर मैं लाइन Dim objRequest As MSXML2.XMLHTTP बाहर टिप्पणी और लाइन uncomment Dim objRequest As Object यह त्रुटि संदेश के साथ विफल रहता है:MSXML2.XMLHTTP विधि प्रारंभिक बाध्यकारी के साथ काम करता है, देर से बाध्यकारी

पैरामीटर सही नहीं है

क्यों, और क्या (यदि कुछ भी) मैं इसके बारे में क्या कर सकते हैं?

Public Function GetSessionId(strApiId, strUserName, strPassword) As String 

    Dim strPostData As String 

    Dim objRequest As MSXML2.XMLHTTP 
    'Dim objRequest As Object ' 

    strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword 

    Set objRequest = New MSXML2.XMLHTTP 
    With objRequest 
     .Open "POST", "https://api.clickatell.com/http/auth", False 
     .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
     .send strPostData 
     GetSessionId = .responseText 
    End With 

End Function 

कोरी, हाँ, मैं जानता हूँ कि मैं उस क्रम में मेरी कोड MSXML प्रकार लायब्रेरी के लिए एक संदर्भ के बिना काम करने के लिए क्या करना होगा। यह मुद्दा यहां नहीं है। कोड में विफल रहता है जब Dim objRequest As Object कि क्या मैं

संदर्भ में Set objRequest = NEW MSXML2.XMLHTTP, या

Set objRequest = CreateObject("MSXML2.XMLHTTP") का उपयोग संदर्भ के बिना की परवाह किए बिना इस्तेमाल करते हैं।

उत्तर

14

, इस काम करता है:

Dim strPostData As String 
Dim objRequest As Object 

strPostData = "api_id=" & strApiId & "&user=" & strUserName & "&password=" & strPassword 

Set objRequest = New MSXML2.XMLHTTP 
With objRequest 
    .Open "POST", "https://api.clickatell.com/http/auth", False 
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    .send (strPostData) 
    GetSessionId = .responseText 
End With 

इसके बजाय निर्माण की URL- एनकोडेड स्ट्रिंग संयोजन के माध्यम से strPostData, यह दृढ़ता से एक URL एन्कोडिंग समारोह का प्रयोग उचित:

strPostData = "api_id=" & URLEncode(strApiId) & _ 
       "&user=" & URLEncode(strUserName) & _ 
       "&password=" & URLEncode(strPassword) 

VBA में एक URLEncode() समारोह के लिए विकल्पों की एक जोड़े को इस सूत्र में कर रहे हैं: How can I URL encode a string in Excel VBA?

+0

यय! धन्यवाद, तोमालाक, यह तय है! :) –

+1

बहुत अजीब बात यह है कि समाधान 'send (strPostData)' में पैराथेन्सिस जोड़ना था। लेकिन मैंने अभी पुष्टि की है कि यह वास्तव में मामला है। –

+0

@ ब्रूनो: पुष्टि के लिए धन्यवाद। मुझे आश्वस्त है कि इसके लिए पूरी तरह से तार्किक स्पष्टीकरण है, कहीं सामान्य रूप से वीबीए या वीबीए-टू-कॉम इंटरैक्शन या एमएसएक्सएमएल 2.एक्सएमएलटीटीपी लाइब्रेरी में विशेष रूप से, लेकिन मुझे कोई जानकारी नहीं है। मुझे यकीन है कि @ एरिक लिपर्ट समझा सकता है। ;) – Tomalak

2

आप वस्तु के रूप में मंद objRequest का उपयोग करते हैं तो आप कोड की आवश्यकता होगी: किसी कारण से
सेट objRequest = CreateObject ("MSXML2.XMLHTTP")

+0

आप "नया MSXML2.XMLHTTP जारी करके बता "। मेरे लिए यह काम करने के दोनों तरीके हैं। – Tomalak

0

मुझे पता है यह ऊपर Tomalek से कोड के लिए लगभग समान है, लेकिन इस सवाल का मेरे प्रति मदद की (आप की वजह से सारा श्रेय!) एक समस्या मैं था (एक्सेल पीएचपी सर्वर को प्रस्तुत है, तो प्रतिक्रिया के साथ काम) के लिए एक पूर्ण समाधान है ... इसलिए मामले में इस किसी और के लिए किसी भी मदद की है:

Sub Button1_Click2() 

Dim objXMLSendDoc As Object 
Set objXMLSendDoc = New MSXML2.DOMDocument 
objXMLSendDoc.async = False 
Dim myxml As String 
myxml = "<?xml version='1.0'?><Request>Do Something</Request>" 
If Not objXMLSendDoc.LoadXML(myxml) Then 
    Err.Raise objXMLSendDoc.parseError.ErrorCode, , objXMLSendDoc.parseError.reason 
End If 

Dim objRequest As MSXML2.XMLHTTP 
Set objRequest = New MSXML2.XMLHTTP 
With objRequest 
    .Open "POST", "http://localhost/SISADraftCalcs/Test2.php", False 
    .setRequestHeader "Content-Type", "application/xml;charset=UTF-16" 
    .setRequestHeader "Cache-Control", "no-cache" 
    .send objXMLSendDoc 
End With 

Dim objXMLDoc As MSXML2.DOMDocument 
Set objXMLDoc = objRequest.responseXML 
If objXMLDoc.XML = "" Then 
    objXMLDoc.LoadXML objRequest.responseText 
    If objXMLDoc.parseError.ErrorCode <> 0 Then 
     MsgBox objXMLDoc.parseError.reason 
    End If 
End If 

Dim rootNode As IXMLDOMElement 
Set rootNode = objXMLDoc.DocumentElement 

MsgBox rootNode.SelectNodes("text").Item(0).text 

End Sub 
संबंधित मुद्दे