繁体   English   中英

我可以在PHP中等待js进程再继续吗?

[英]Can I wait for a js process within PHP before continuing?

我有一个用于注册用户的PHP脚本,但是在此过程中,我尝试调用Google GEOCoding javascript方法以返回客户端经纬度并将其记录到数据库,然后再继续进行PHP注册过程。

可以这样做还是有更好的方法?

我当前的代码如下所示:

private function process() {

    $this->validate();
    $this->register();

    // execute javascript here to record lat/lng coordinates to the DB. 

    $this->goHome();
}

您不需要javascript。 Google Geocoding API是一项网络服务。 在PHP中,只需执行file_get_contents()并使用此处所述的正确url格式发出请求即可。 然后,您需要通过PHP的json_decode()运行结果。

您不能只在PHP脚本中运行JavaScript。 PHP在服务器上执行,JavaScript在客户端的浏览器中执行。 您应该修改您的注册表格,以便在提交表格之前调用JavaScript,并且您应该将用户的经/纬度作为额外的数据传递给注册。 然后,当您的PHP注册运行时,您将可以访问此数据。

一个更好的主意是找到一个PHP库进行地理编码。 请参阅Johnathan M的答案。

Javascript是客户端脚本语言Php是服务器端

这使您无法想象自己做到的方式。

看看GeoIP http://php.net/manual/zh/book.geoip.php

通常,您只处理脚本中的一个请求,而您要询问的内容至少需要两个:第一个用户会从服务器请求一些响应,然后您便可以将JS发送给他,第二个请求中他将提交运行该JS的结果。

您可以通过某种方式保存“等待响应的状态”,并在响应时处理地理响应。

我认为解决问题的最简单方法是使用2个AJAX调用和一个函数:-第一个调用PHP脚本进行验证/注册-完成后,运行客户端JS脚本进行地理编码-使用另一个AJAX调用以地理编码的结果更新数据库

您应该可以通过这种方式解决您的问题。 如果您使用类似jQuery的库,则可以轻松进行AJAX调用,甚至可以使用延迟对象,我认为这可以帮助您将调用链接到http://api.jquery.com/category/deferred-object/

可以在服务器端使用Web API在PHP中进行GeoIP查找。

例如: http : //www.maxmind.com/en/web_services

他们在这里有一个PHP示例(我不会那样称呼Webservice,但它可以工作): http : //dev.maxmind.com/geoip/web-services#PHP-11

private function process() {

    $this->validate();
    // Do a call to the webservice here with PHP, update user data with the response.
    $this->register();

    $this->goHome();
}

有几种解决方法。

最好的方法是在PHP中进行地理缓存调用,而不是全部使用javascript。 PHP有几种从代码发出HTTP请求的方法,这些方法将返回可在脚本中使用的结果。 我个人更喜欢cURL: http : //php.net/manual/en/book.curl.php 另请参见乔纳森·M(Jonathan M)先前的答复,相同的想法,但使用file_get_contents()。

另一种(更hacker的)方法是使对Google Geocoding API的javascript调用同步(jquery.ajax()中的async = false),并使其通过ajax调用上的回调执行对注册php页面的请求。 (ajax上的“ success”属性。)这意味着在完成地理编码查询之前,不会调用您的注册页面。 是否要根据ajax请求的完成来完成注册是成功还是失败,但这是一个有效的问题。 在此处查看有关jquery中同步ajax请求的信息: http : //api.jquery.com/jQuery.ajax/ 不过,这确实不是最好的方法。 地理编码查询确实是注册的一部分,您要做的最后一件事是使您的php注册依赖于不可靠的前端行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM