2017-05-12 42 views
2

我正在做的項目我試圖做一個異步XMLHTTP調用。 我使用下面的代碼:VBscript異步XMLHttp調用

soapmessage = _ 
"<?xml version='1.0' encoding='utf-8'?>"& vbcrlf& vbcrlf & _ 
"<soap:Envelope"& vbcrlf & _ 
" xmlns:xsi="&chr(34)&"http://www.w3.org/2001/XMLSchema-instance"&chr(34)& 
vbcrlf & _ 
" xmlns:xsd="&chr(34)&"http://www.w3.org/2001/XMLSchema"&chr(34)& vbcrlf & _ 
" xmlns:soap="&chr(34)&"http://www.w3.org/2003/05/soap- 
envelope"&chr(34)&">"& vbcrlf & _ 
" <soap:Body>"& vbcrlf & _ 
"<notification>"& vbcrlf & _ 
" <action>Action</action>"& vbcrlf & _ 
" <objectid>333333</objectid>"& vbcrlf & _ 
"</notification>"& vbcrlf & _ 
" </soap:Body>" & vbcrlf & _ 
" </soap:Envelope>" 

strEndpoint = "**********" 

Set xmlhttp = CreateObject("MSXML2.SERVERXMLHTTP.6.0") 
xmlhttp.open "POST", strEndpoint, True 
xmlhttp.OnReadyStateChange = doHttpOnReadyStateChange() 
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
xmlhttp.Send soapmessage 

Function doHttpOnReadyStateChange() 
    If xmlhttp.ReadyState = 4 Then 
     'do something 
    End If 
End Function 

當我嘗試執行此我得到如下:

test.vbs(19, 1) Microsoft VBScript runtime error: Type mismatch: 'xmlhttp.OnReadyStateChange'

任何想法我可以做錯了什麼? 這是我第一次嘗試異步呼叫,所以我有點困惑與OnReadyStateChange

回答

2

它需要一個函數引用,你可以使用GetRef()功能。

xmlhttp.OnReadyStateChange = GetRef("doHttpOnReadyStateChange") 

Dirk.R:想補充一點,雖然這是修復。請記住,聲明的順序也很重要!

+0

用GetRef(「」)在函數名周圍試了一下。沒有更多的錯誤,但也沒有任何反應..把一些調試代碼在那裏得到一個msgbox或任何東西,但似乎從來沒有進入該功能(即使外面的「如果」).. –

+0

@DirkR。奇怪,你嘗試過一個'Sub'程序而不是'Function',因爲你沒有返回任何東西,雖然看不出它有什麼區別。這幾乎就像'OnReadyStateChange'事件沒有觸發。 – Lankymart

+0

剛剛嘗試過一個小組,但結果相同..它看起來好像不是在燃燒。我試過使用一個普通的MSXML2.XMLHTTP.6.0對象而不是服務器,但也沒有任何東西..真的難倒了! –