可以暂停 PHP 脚本,使用 HTML/JS 获取 GPS 位置,然后恢复 PHP?

Posted

技术标签:

【中文标题】可以暂停 PHP 脚本,使用 HTML/JS 获取 GPS 位置,然后恢复 PHP?【英文标题】:Possible to pause PHP script, get GPS location using HTML/JS, then resume PHP? 【发布时间】:2014-07-22 09:57:50 【问题描述】:

我正在制作一个 php 脚本,它在向用户输出数据之前需要用户的位置。

获取位置的唯一可靠方法是使用 javascript,“navigator.geolocation.getCurrentPosition”

这会引起麻烦,因为在检索位置之前确实需要一些时间。

简单的解决方案是首先呈现一个页面以检索位置,然后在检索时显示一个按钮,用户单击该按钮以重新加载页面(或自动重新加载)。

但最巧妙的解决方案是在同一页面加载时完成此操作(PHP 脚本等待 JS 完成,然后恢复)。

有什么办法吗?

PHP 首先输出地理位置 JS,PHP 脚本暂停,当检索到位置 JS 然后以某种方式向 PHP 脚本发送消息,PHP 脚本继续。

【问题讨论】:

如果您需要数据,请先收集数据,然后在运行之前将值传递给 php 脚本。您不能暂停 php 脚本执行的生命周期以从 js 获取数据 我在想可能有一个“线程 ID”或执行 ID 或类似的东西可以传递给 JS,然后 JS 发送一个 ajax 请求告诉服务器恢复执行。但我想这是不可能的。 sry 这是不可能的,您需要先收集这些信息。 【参考方案1】:

没有任何有用的方法可以暂停 php 脚本。

最适合您的工作的方法是打印包含地图或其他数据的占位符 (div) 的 html 代码,等待坐标,将它们作为 ajax 请求发送到您的 PHP 脚本,然后替换空 div包含真实数据的容器(占位符)。

【讨论】:

我同意。 Ajax 以异步方式运行,因此它可以在页面的其余部分运行时运行。用 css 隐藏区域,当 Ajax 从你的 PHP 脚本返回数据时,用数据显示区域 但是我使用PHP来输出所有内容(包括header.php等),所以我想如果不刷新页面(再次运行脚本)就没有办法做到这一点?【参考方案2】:

没有办法暂停 php 脚本,即使你可以这样做是不好的做法。对于这种东西,javascript 回调和 ajax 是最好的解决方案。

的第一个参数
Geolocation.getCurrentPosition(success, error, options)

是成功回调,因此如果您将 ajax 请求发送到运行 php 脚本的服务器。它将加载您的位置,只有当它成功找到您的位置时,才会触发成功回调,这将是您的 ajax 请求,并且在您的 ajax 成功后,您可以使用 javascript 生成您的 html

类似的东西

Geolocation.getCurrentPosition(function()
    $.ajax(
        method: 'post',
        url: '/request/path',
        dataType: 'json',
        success: function(result)

        
    );
 , error, options)

如果你不擅长 ajax,这是 jQuery ajax 手册给你 http://api.jquery.com/jquery.ajax/

希望对你有帮助

【讨论】:

以上是关于可以暂停 PHP 脚本,使用 HTML/JS 获取 GPS 位置,然后恢复 PHP?的主要内容,如果未能解决你的问题,请参考以下文章

PHP,暂停脚本执行,直到另一个正在运行的脚本发出事件信号?

需要正确的密码才能登录php [暂停]

使用 Eclipse 调试 PHP 脚本

为暂停的订阅正确的贝宝 IPN 变量

调试会话在没有暂停的情况下完成

如何使用 Ajax 函数从 php 服务器获取会话变量? (PHP HTML JS Ajax)