-1

问题是:我有一个 VBScript,它是从 WinCCRuntime 应用程序(西门子软件)运行的。该脚本创建 MSXML2.XMLHTTP 对象并将数据发送到处理程序(用 PHP 编写),该处理程序在同一主机(虚拟机上的所有应用程序)上的 OpenServer 5.3.0.Premium(免费 Web 服务器)上运行。脚本工作后,我在 VBS 应用程序就绪状态“4”中收到带有正确数据的响应文本(PHP 只是打印出它收到的内容)。但是这些数据不会在浏览器的页面上打印出来!!!(Echo 什么都不打印,print_r 只打印 ampty Array)。使用 GET 和 POST 时问题是一样的。当只是通过链接 localhost:90/ajax1/handler.php?value=value 一切正常。我需要将数据从 WInCC 应用程序发送到 WEB 应用程序。问题是什么?我已经看透了: POST 数组没有被打印出来 但还有另一件事。预先感谢。

这是 VBScript:

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)                                                  

Dim xmlhttp
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")

data1="hello"
xmlhttp.open "GET", "http://localhost:90/ajax1/handler.php?value="&data1, True
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.setRequestHeader "Access-Control-Allow-Origin", " *"
xmlhttp.send ""

Dim obj4 
Set obj4 = HMIRuntime.Screens("http").ScreenItems("Button2")
obj4.Text=xmlhttp.readyState

Dim obj3 
Set obj3 = HMIRuntime.Screens("http").ScreenItems("Button3")
obj3.Text=xmlhttp.responseText


End Sub

这是 PHP 脚本:

 <?php
    $value=$_GET['value'];
    echo $value."<br/>";
?>

4是readystate,hello
是responsetext

4

1 回答 1

0

您正在发出异步请求。程序执行将在就绪状态达到 4 并处理响应obj4.Text=xmlhttp.readyState 之前继续执行。

请参阅文档

在 Visual Basic 中,您需要编写以下语句,其中 xmldoc 是一个变量并实现一个名为 xmldoc_onreadystatechange() 的子例程。

Dim WithEvents xmldoc As DOMDocument30  

示例:请参阅在 Visual Basic 和 Visual C/C++ 中使用 OnReadyStateChange 属性

于 2019-03-14T11:31:25.837 回答