【问题标题】:Is it possible that call javascript function based on PHP CURL request是否可以根据 PHP CURL 请求调用 javascript 函数
【发布时间】:2019-04-20 10:38:06
【问题描述】:

我想在使用 Codeigniter 从 CURL 请求中调用 javascript 函数。基本上我想在数据库中输入数据时在浏览器中触发通知。因此,当数据输入时,我使用 CURL 请求并加载一个页面,并且在该页面中我想调用触发通知功能。我在下面尝试过,但没有成功。

Curl 请求的 PHP 代码

$post = $_POST;

        $url = str_replace('/ws/'.APP_VERSION,'',site_url('mydomain/notification_update'));
       $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $server_output = curl_exec($ch);

        curl_close ($ch);

另一个基于 CURL 请求调用的 PHP 页面

public function notification_update() {
        $post = $_POST;
        $this->load->view('header', $post, FALSE);

    }

查看页面

<script type="text/javascript">
        var w_type = '<?= (isset($w_type) && $w_type == 'for_window_noty') ? $w_type : '' ?>';
            console.log('w_type', w_type);
          if(w_type) {
                console.log('succes test');
          }


</script>

我这里只有用于查看页面的 javascript 代码。

注意:我的帖子参数是w_type = for_window_noty

【问题讨论】:

  • php 完成页面输出后脚本 w_type var 得到什么值?
  • 我想在收到 curl 请求时生成通知,所以我会在收到 curl 请求时调用另一个 ajax。我知道我可以通过在某个时间间隔调用 ajax 来做到这一点,但它会给服务器带来太多负载。所以我只想在实际数据进入数据库时​​调用 ajax。
  • @James 值就像 w_type = for_window_noty
  • 听起来你想设置websockets来防止ajax轮询负载
  • @charlietfl 是的,我可以使用套接字,但使用 node.js 很容易,但我认为使用 PHP 的套接字并不是那么容易。

标签: javascript php jquery codeigniter php-curl


【解决方案1】:

服务器发送事件

使用事件监听器来监听Server Sent Events

触发后,显示您的信息。

它使用事件源

if (!!window.EventSource) {
  var source = new EventSource('stream.php')
} else {
  // Result to xhr polling :(
}

你可以听

source.addEventListener('message', function(e) {
  console.log(e.data)
}, false)

WebSockets API

另一种方法是使用WebSockets API

WebSockets 允许客户端和服务器之间的双向通信。

它的代价是实现起来有点繁重。

【讨论】:

  • 对于服务器端?
  • 实现服务器端没有标准化,但有可用的库。一个快速的谷歌搜索把我带到了github.com/hhxsv5/php-sse,它显示了 PHP 泛型以及 Symfony/Laravel 的示例。当然,这不是唯一可用的库,您应该选择最适合您需要的库。
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多