0

我有一个用于注册用户的 PHP 脚本,但在此过程中,我试图调用 Google GEOCoding javascript 方法来返回客户端 lat/lng 并将其记录到数据库,然后再继续我的 PHP 注册过程。

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

我当前的代码如下所示:

private function process() {

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

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

    $this->goHome();
}
4

7 回答 7

4

你不需要javascript。Google 地理编码 API 是一项网络服务。在 PHP 中,只需执行 a并使用此处file_get_contents()所述的正确 url 格式发出请求。然后,您需要通过 PHP 的.json_decode()

于 2012-12-19T14:48:13.547 回答
1

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

一个更好的主意是找到一个 PHP 库来进行地理编码。 请参阅乔纳森 M 的回答。

于 2012-12-19T14:41:44.737 回答
0

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

这使您无法按照您想象的方式进行操作。

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

于 2012-12-19T14:41:34.467 回答
0

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

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

于 2012-12-19T14:42:41.633 回答
0

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

您应该能够以这种方式解决您的问题。如果你使用像 jQuery 这样的库,它很容易进行 AJAX 调用,你甚至可以使用延迟对象,我认为这可以帮助你链接你的调用http://api.jquery.com/category/deferred-object/

于 2012-12-19T14:48:55.480 回答
0

在 PHP 中使用 Web API 而不是在服务器端进行 GeoIP 查找。

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

他们在这里有一个 PHP 示例(我不会那样调用 web 服务,但它可以工作): 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();
}
于 2012-12-19T14:50:38.890 回答
0

有几种方法可以解决它。

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

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

于 2012-12-19T14:52:35.603 回答