【问题标题】:ajax request to the server side script (controller) to get the status of the server向服务器端脚本(控制器)发出ajax请求以获取服务器的状态
【发布时间】:2015-10-25 05:03:25
【问题描述】:

我想为树枝页面中的按钮获取服务器端响应。例如 - 页面中会有 2 个按钮 ---

开/关

当页面加载时,它应该从服务器检查(从 elasticsearch 数据库检查)是否返回 True 或 false,两个按钮。

因此,例如,我们说对于 ON 按钮,它返回“True”,它应该将其颜色更改为绿色,例如 ----

$(this).addClass('btn-success');
$(this).removeClass('btn-primary');

主要目的是检查页面加载时的当前状态。

所以这不是点击功能,因为它显示页面加载时的状态。

这是我的客户端代码---

$(document).ready(function(){
   //send the request with empty data to the server to check the status
   $.post('/url/to/action', {}, function(msg){
     // we return a response like {status: 'on'} to the client if the search is on
     if (msg.status == 'on'){
       $('#my-button').addClass('success');
     }
     // else it is disabled
     else
       $('#my-button').addClass('primary');
   });
});

这是与我的 symfony 应用程序的集成 ---

public function getStatusAction(Request $request){
    if ($output = !null) {
        return new \Symfony\Component\HttpFoundation\JsonResponse(array('status' => 'on'));
    } else {
        return new \Symfony\Component\HttpFoundation\JsonResponse(array('status' => 'off'));
    }
}

这是我跑去获取状态时的状态

现在的问题是,当页面加载时,它不会重新显示按钮的状态。 我的意思是如果 "status == 'on'" 按钮应该是绿色而不是主要的。

有谁知道我该如何解决这个问题。

【问题讨论】:

  • 在 php.ini 页面加载前检查状态。将参数传递给树枝模板。

标签: javascript php jquery ajax symfony


【解决方案1】:

为此,您可以使用setInterval

function refreshStatus () {
    $.post('/url/to/action', {}, function (msg) {
        // we return a response like {status: 'on'} to the client if the search is on
        if (msg.status == 'on'){
            $('#my-button').addClass('success');
        }
        // else it is disabled
        else
            $('#my-button').addClass('primary');
    });
}

refreshStatus(); // call on page load
setInterval(refreshStatus, 5000); // call refreshStatus every 5 seconds

【讨论】:

  • setTimeout 比 @Quasimodo 的克隆 stackoverflow.com/questions/23178015/… 的 setInterval 要好得多,对于通过递归 setTimeout 进行更准确的定期调用很有用,缺点是即使抛出未捕获的异常也会触发回调。此外,负载较重的 setInterval 回调可能会变得无响应递归 setTimeout 将保证从回调函数返回后其他任务的时间范围与函数的执行时间无关。
  • 这个Quasimodo's clone的答案只有2票,你还有其他来源吗?
  • @mmm 感谢您的回答,但它总是会返回“Uncaught ReferenceError: refreshStatus is not defined”
  • @christofer Hansen 检查为什么要使用 setTimeout over setInterval,In set reallifejs.com/brainchunks/repeated-events-timeout-or-interval
猜你喜欢
  • 2016-02-27
  • 1970-01-01
  • 2023-03-30
  • 2016-12-29
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多