<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Callback с параметрами (пример)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13454&amp;type=atom" />
	<updated>2018-02-09T14:44:50Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13454</id>
		<entry>
			<title type="html"><![CDATA[VBS: Callback с параметрами (пример)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=123646#p123646" />
			<content type="html"><![CDATA[<p>Оставлю тут, а то многие спрашивали.<br /></p><div class="codebox"><pre><code>
Option Explicit

RunInConsoleMode

Dim urls, url, xhr, i, n
urls = Array(&quot;http://www.altavista.com&quot;, _
			&quot;http://www.google.ru&quot;, _
			&quot;http://www.rambler.ru&quot;, _
			&quot;http://www.unknownurl.com&quot;, _
			&quot;http://www.yandex.ru&quot;, _
			&quot;http://www.vesti.ru&quot;, _
			&quot;http://www.gazeta.ru&quot;)
			
For i = Lbound(urls) to Ubound(urls)
	url = urls(i)
	Set xhr = CreateObject(&quot;MSXML2.ServerXMLHTTP.6.0&quot;)
	WScript.Echo &quot;Request &quot; &amp; i &amp; &quot; &quot; &amp; url
	With xhr
		.setTimeouts 5000, 5000, 15000, 15000
		.onreadystatechange = New Callback.Set(Array(GetRef(&quot;xhr_onreadystatechange&quot;), i, xhr, url))
		.open &quot;GET&quot;, url, true
		.send
	End With
Next

WScript.Echo(String(50,&quot;-&quot;))

WScript.Sleep 3000

&#039;Функция обратного вызова
Function xhr_onreadystatechange(i, xhr, url)
	if xhr.readyState &lt;&gt; 4 then Exit Function
	WScript.Echo &quot;Response &quot; &amp; i &amp; &quot; &quot; &amp; url &amp; &quot; &quot; &amp; xhr.status &amp; &quot; &quot; &amp; xhr.statusText
End Function
				

WScript.Echo &quot;Press &quot;&quot;Enter&quot;&quot; to close&quot;

WScript.StdIn.ReadLine
 
Class Callback
	Private arr
	&#039;Функция установки параметров
	&#039;args - Array(Object, [MethodName], [arg1], [arg2], ..., [argN])
	&#039;Object - Object / Class / Function / Sub
	Function [Set](args)
		If Not isArray(args) Then Err.Raise 13, TypeName(Me)
		arr = args
		Set [Set] = Me
	End Function
	
	&#039;Метод, вызываемый у объекта по умолчанию
	Public Default Sub []()
		Dim i, Code, lb
		If Not isArray(arr) Then Exit Sub
		lb = Lbound(arr)
		For i = lb + 1 to Ubound(arr)
			Code = Code &amp; &quot;,arr(&quot; &amp; i &amp; &quot;)&quot;
		Next
		Code = &quot;(&quot; &amp; mid(Code,2) &amp; &quot;)&quot;
		Eval &quot;arr(lb)&quot; &amp; Code
	End Sub
End Class

Sub RunInConsoleMode()
	If InStr(1,WScript.FullName,&quot;cscript&quot;,1) &gt; 0 Then Exit Sub
	CreateObject(&quot;WScript.Shell&quot;).Run(&quot;cscript /nologo &quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot;&quot;)
	WScript.Quit
End Sub
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-02-09T14:44:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=123646#p123646</id>
		</entry>
</feed>
