2009-02-13 15 views
8

दरअसल वहां कई उदाहरण हैं और मैंने उनमें से एक का उपयोग किया है। लेकिन यह असीमित काम करता है, मेरा मतलब है कि यह उस समारोह का इंतजार नहीं कर रहा है जिसे मैंने खत्म करने के लिए बुलाया था।vbscript (तुल्यकालिक) का उपयोग कर वेब सेवा को कैसे कॉल करें?

function ProcessSend() 
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.4.0") 
    Set oXMLDoc = CreateObject("MSXML2.DOMDocument") 

    oXMLHTTP.onreadystatechange = getRef("HandleStateChange") 

    strEnvelope = "callNo="&callNo&"&exp="&exp 

    call oXMLHTTP.open("POST","http://localhost:11883/ServiceCall.asmx/"&posFirm,true) 
    call oXMLHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded") 


    call oXMLHTTP.send(strEnvelope) 
end function 

Sub HandleStateChange 
    if(oXMLHTTP.readyState = 4) then 
     dim szResponse: szResponse = oXMLHTTP.responseText 
     call oXMLDoc.loadXML(szResponse) 
     if(oXMLDoc.parseError.errorCode <> 0) then 
      'call msgbox("ERROR") 
      response = oXMLHTTP.responseText&" "&oXMLDoc.parseError.reason 
      'call msgbox(oXMLDoc.parseError.reason) 
     else 
      response = oXMLDoc.getElementsByTagName("string")(0).childNodes(0).text 
     end if 

    end if 
End Sub 

मैं जावास्क्रिप्ट फ़ंक्शन में ProcessSend फ़ंक्शन को कॉल करता हूं। यह webservice से जुड़ता है, और "प्रतिक्रिया" चर देता है। लेकिन मेरा जावास्क्रिप्ट फ़ंक्शन ProcessSend फ़ंक्शन परिणाम का इंतजार नहीं करता है। मैं इसे सिंक्रोनस कैसे बना सकता हूं?

+1

एक ब्राउज़र में या Windows स्क्रिप्टिंग पर आप कर रहे हैं मेज़बान? यदि आप ब्राउज़र में हैं, तो आप आधा जावास्क्रिप्ट, आधा वीबीस्क्रिप्ट क्यों उपयोग करते हैं? – Tomalak

उत्तर

9

ये रहा:

function ProcessSend() 
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.4.0") 
    Set oXMLDoc = CreateObject("MSXML2.DOMDocument") 

    oXMLHTTP.onreadystatechange = getRef("HandleStateChange") 

    strEnvelope = "callNo="&callNo&"&exp="&exp 

    call oXMLHTTP.open("POST","http://localhost:11883/ServiceCall.asmx/"&posFirm,false)'<< changed true to false here. 
    call oXMLHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded") 


    call oXMLHTTP.send(strEnvelope) 
end function 

Sub HandleStateChange 
    if(oXMLHTTP.readyState = 4) then 
     dim szResponse: szResponse = oXMLHTTP.responseText 
     call oXMLDoc.loadXML(szResponse) 
     if(oXMLDoc.parseError.errorCode <> 0) then 
       'call msgbox("ERROR") 
       response = oXMLHTTP.responseText&" "&oXMLDoc.parseError.reason 
       'call msgbox(oXMLDoc.parseError.reason) 
     else 
       response = oXMLDoc.getElementsByTagName("string")(0).childNodes(0).text 
     end if 

    end if 
End Sub 

तुम क्यों btw VBScript में यह कर रहे हैं, यदि आपका कोड के बाकी JScript में है?

function ProcessSend(){ 
    var oXMLHTTP = ActiveXObject("MSXML2.XMLHTTP.4.0") 
    strEnvelope = "callNo=" + callNo + " & exp=" + exp; 
    oXMLHTTP.open("POST", "http://localhost:11883/ServiceCall.asmx/" + posFirm, false); 
    oXMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    oXMLHTTP.send(strEnvelope); 
    if(oXMLHTTP.readyState == 4){ 
     if(oXMLHTTP.responseXML.parseError.errorCode != 0){ 
       response = oXMLHTTP.responseText & " " & oXMLHTTP.responseXML.parseError.reason; 
     }else{ 
       response = oXMLHTTP.responseXML.getElementsByTagName("string")(0).childNodes(0).text; 
     } 
    } 
} 
+0

धन्यवाद। मैं vbscript का उपयोग क्यों कर रहा हूं? वास्तव में मुझे नहीं पता, मैं vbscript में लिखे गए कोड को संशोधित करने की कोशिश कर रहा हूं। – NetSide

9

आप तुल्यकालिक कॉल कर रहे हैं, तो आप कॉलबैक की जरूरत नहीं है, और आप इस में कोड हटना कर सकते हैं:: इस तरह

function ProcessSend() 
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.4.0") 
    Set oXMLDoc = CreateObject("MSXML2.DOMDocument") 

    strEnvelope = "callNo=" & callNo & "&exp=" & exp 

    call oXMLHTTP.open("POST", "http://localhost:11883/ServiceCall.asmx/"&posFirm, false) 
    call oXMLHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded") 
    call oXMLHTTP.send(strEnvelope) 

    dim szResponse: szResponse = oXMLHTTP.responseText 
    call oXMLDoc.loadXML(szResponse) 

    if(oXMLDoc.parseError.errorCode <> 0) then 
     'call msgbox("ERROR") 
     response = oXMLHTTP.responseText&" "&oXMLDoc.parseError.reason 
     'call msgbox(oXMLDoc.parseError.reason) 
    else 
     response = oXMLDoc.getElementsByTagName("string")(0).childNodes(0).text 
    end if 
End Sub 
संबंधित मुद्दे