0

ユーザーの登録に使用する PHP スクリプトがありますが、そのプロセス中に Google GEOCoding JavaScript メソッドを呼び出して、クライアントの緯度/経度を返し、それを DB に記録してから、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 Geocoding API は Web サービスです。PHP では、ここで説明されfile_get_contents()ているように、適切な URL 形式を使用してリクエストを発行します。次に、結果を PHP の .xml で実行する必要があります。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はサーバーサイドです

これはあなたがそれをすることを想像する方法を不可能にします。

GeoIPhttp://php.net/manual/en/book.geoip.phpをご覧 ください

于 2012-12-19T14:41:34.467 に答える
0

問題を解決する最も簡単な方法は、2 つの AJAX 呼び出しと関数を使用することだと思います。ジオコーディングの結果で DB を更新するための呼び出し

この方法で問題を解決できるはずです。jQueryのようなライブラリを使用すると、AJAX呼び出しを簡単に実行でき、遅延オブジェクトを利用することもできます。これは、呼び出しを連鎖させるのに役立つと思いますhttp://api.jquery.com/category/deferred-object/

于 2012-12-19T14:48:55.480 に答える
0

サーバー側ではなく Web API を使用して、PHP で 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

それにはいくつかの方法があります。

最良のアプローチは、javascript をすべて使用するのではなく、PHP 内でジオキャッシング呼び出しを行うことです。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 に答える
0

通常、スクリプトで処理するリクエストは 1 つだけで、質問には少なくとも 2 つのリクエストが必要です。最初のユーザーはサーバーからの応答を要求し、JS を彼に送信し、2 番目のリクエストで送信することができます。そのJSを実行した結果。

「応答待ち状態」を何らかの方法で保存し、ジオ応答が来たら処理することができます。

于 2012-12-19T14:42:41.633 に答える