【问题标题】:php echo something between 2 functions after an AJAX callphp 在 AJAX 调用后在 2 个函数之间回显某些内容
【发布时间】:2017-03-03 09:24:01
【问题描述】:

我正在寻找一种在 2 个函数之间获得回声(或其他任何东西)的方法,第一个函数是通过 Ajax 调用的。

这是我正在做的事情:

我通过 Ajax 将视频上传到临时存储它的服务器。 然后将视频传递给一个私有函数,该函数通过 API 将其发送到 youtube,然后在服务器上取消设置视频。

我的问题:在这两个函数之间,有没有办法从 PHP 脚本中获取一些可以由客户端处理的内容以通知他进度?

我试过了:

  • 发送JSON
  • 在 Ajax 调用时更新由 JS 检查的会话
  • flush() 和 ob_flush()

但总是在第二个函数的末尾返回数据(当我不再需要任何东西时),好像在调用和之后的所有内容时,PHP 无法说什么

我想要:

function upload()
{
    //uploading
    if(ok) 
    {
        //echoing something there (the main goal)
        goYoutube();
    }
}

private function goYoutube() {
//etc...
}       

而我所拥有的是:

 function upload()
 {
    //uploading
    if(ok) 
    {
        goYoutube();
    }
}

private function goYoutube() 
{
    //etc...
    //echoing something there (the bad bad bad useless thing)
}    

它与 CodeIgniter 一起使用,我没有在服务器上使用。

我不需要代码,只是一个想法(将不胜感激)

当然,像“不要浪费你的时间家伙,这不能完成”这样的事情是可以的!

谢谢。

【问题讨论】:

  • 您可以从 JS 发送单独的请求来请求当前操作的状态。然后,您将需要获得此状态的方法。或者您也可以考虑使用 SSE 或 WebSocket 并将进度直接发送给客户端。
  • @AntonM。是的,我发现在长脚本期间的中间刷新令人沮丧...... - 从 PHP 本身的角度来看,它很复杂,然后你也必须处理 Web 服务器......最简单的可能是定期 ajax 调用一些生成的 ID 的脚本,并且在很长一段时间内脚本将进度信息存储到 sessionvar 中,将由 ajax 调用的脚本返回。
  • Thx,我实际上已经有上传本身的 xhr 进度(不是那么精确,但好吧......没关系),我想要得到的是 PHP 运行“ goyoutube" 功能(或结束上传);我明白了,但是当一切都完成时。

标签: php jquery ajax


【解决方案1】:

PHP 是一种服务器端语言,我认为在脚本完成执行之前它不会输出任何内容。如果我是你,我会尝试将这些函数拆分为两个单独的 AJAX 请求。

第一个请求为用户提供一切正常的答案(或类似“请稍候”),第二个请求调用 YouTube API。

【讨论】:

  • 而像“0-100%”这样的进度可以存储在会话变量中......反正它不是机密数据。
  • 是的。或者您可以估计“它不会花费超过 x 秒”并使用 Javascript 制作一个漂亮的进度条,这样您就不会因为用户不知道发生了什么而失去用户。
  • @Alex Spataru,谢谢,这是一种方式,但我希望我的 youtube 函数名称无论如何都不会出现在客户端,目前,上传和这个都可以正常工作私有函数。
【解决方案2】:

您可以通过建立 websocket 连接并将事件从服务器发送到客户端来实现。我通常使用 socket.io 在 nodejs 中执行此操作。我看到 PHP 有一个类似的选项:elephant.io

所以事情的顺序是:

  • 与服务器建立 websockets 连接(在发送视频之前)
  • 在客户端,监听您将收到的事件并在那里进行任何更新。
  • 上传视频。
  • 在服务器端,发送一个 websockets 事件,您可以在其中放置“echo”

看看吧,我真的觉得可以。

【讨论】:

  • 感谢您的解决方案,虽然我通过比较上传的部分和总大小来获得一个默认方法,但我保留它以备将来使用。谢谢大家!
猜你喜欢
  • 2019-05-30
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多