标题有点混乱,但我的问题是:
Javascript对PHP控制器执行AJAX请求。在PHP控制器中,创建并启动了一个线程。代码是:
public function run() {
while(true) {
//Do Something...
//Know I want to tell Javascript that I have done the thing and I'm going to sleep.
sleep(10000);
}
}
所以JavaScript代码是:
$.ajax({
type: 'POST',
url: "controllers/DatabaseController/",
data: dataObject,
success: function(response) {
//Do Something after the Thread Result
}
});
我认为这个问题是不可能的......因为线程在客户端设置的时间之后运行并休眠。当线程运行时,客户端需要查看线程的结果。
我该怎么做? Javascript需要像PHP Thread一样处于循环中吗?
情况是:
- 线程对设备状态进行轮询,然后javascript改变设备的图标状态(绿色或红色)。
答案 0 :(得分:0)
你能做的是:
创建两个控制器方法:一个用于启动线程,另一个用于检查其状态。
您发出ajax请求以启动该线程。线程启动后,您将返回一个响应,并显示成功/错误消息。
如果线程成功启动,您将定期发出第二个ajax请求以检查线程的状态。
您还可以在第一次调用中返回线程休眠的预期时间,以便您可以调整第二个ajax请求的时间。
修改(试图澄清):
让我们说你的线程将检查机器有多少燃料。该线程将查询该机器并将其保存到数据库中。 控制器中的第二个方法将查询数据库并获取线程保存的结果。
示例强>:
控制器:
class Controller
{
public function startThread()
{
// start thread
// return
}
public function checkStatus()
{
// query database for status
// return results
}
public function thread()
{
// check for machines status
// save the results into database
}
}
使用Javascript:
$.ajax({
type: 'POST',
url: "controller/startThread/",
data: dataObject,
success: function(response) {
// if success
setTimeout(function() {
$.ajax({
type: 'POST',
url: "controller/checkStatus/",
data: dataObject,
success: function(response) {
// your result will be here
})
}, 10000)
}
});
答案 1 :(得分:0)
<强>解决方案:强>
我使用了javascript函数setInterval和用户设置的时间,后者运行一个向php控制器发出ajax请求的函数。
Controller创建一个线程,用于轮询设备并死掉。