gpt4 book ai didi

php - 来自 PHP 的 XMLHttpRequestProgressEvent 操作

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:00 25 4
gpt4 key购买 nike

我正在努力解决这个问题:我有一个 Web 界面,它使用套接字连接到某些路由器板上运行的各种 C 程序。每次 C 应用程序通过套接字发送内容时,PHP 应用程序都会接收到它。对于一次性请求,一切都完美无缺,但有一种情况,每次 C 应用程序发送更新时,我都需要更新浏览器上的界面,直到它结束其任务。我可以通过对处理与 C 应用程序通信的 PHP 脚本使用 jQuery.ajax 调用来成功启动该过程,并且我已经设法在每次更新后将 XMLHttpRequestProgressEvent 发送回客户端每次脚本通过它向 C 应用程序打开的套接字接收到一些东西时,向 PHP 输出缓冲区写入一些东西并刷新它。事情是,我想向 XMLHttpRequestProgressEvent 添加一些有意义的数据,通过检查它我可以看到它同时具有 targetsrcTarget 属于 XMLHttpRequest 的属性。我认为其中之一的 responseText 将是缓冲区的内容,但事实并非如此。

所以我的问题是:如何将数据封装在 PHP 的 XMLHttpRequestProgressEvent 中,是否有比使用 flush 发送该事件更好的方法?

部分代码:

C

pipe = popen(command, "r");

while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
printf("%s\n", buffer);
tcp_send(currentHandler, buffer);
}

pclose(pipe);

(是的,我实际上执行了另一个进程并发回了输出,至少现在是这样)。

PHP

$done = false;

while(!$done) {
$buffer = socket_read($socket, 128);

if (!$buffer || $buffer == "")
$done = true;

// I'd like to send back the value of $buffer as well!

echo ".";
flush();
}

JavaScript

$.ajax({
url: 'myScript.php',
type: 'post',
dataType: 'json',
data: {action: 'runTest', ajax: true},
success: function(data, status, xhr) {
console.log('Aye!');
},
progress: function(e) {
console.log(e);
},
error: function(xhr) {
console.log('Nay!');
console.log(xhr);
}
});

(当然我扩展了 jQuery.ajax 来处理进度事件)

更新 根据 W3C specification进度事件只能有 lengthComputabletotalloaded 值。很公平。我仍然希望能够设置它们各自的值:)

最佳答案

试试 Node.js 也许它对你有用

关于php - 来自 PHP 的 XMLHttpRequestProgressEvent 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16483409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com