地理位置坐标不从javascript传递到php

时间:2017-12-04 10:45:53

标签: javascript php ajax google-maps geolocation

在mysql之后,有很多困难要将地理位置数据发送到php for store。搜索和获得支持已经取得了很多成果,但仍未看到页面中用户的坐标。

这里的代码。

1.来自template-maps.php的代码:

var pos;
var posZae = function(pos){
                    return {
                            coords: {
                                latitude: pos.coords.latitude,
                                longitude: pos.coords.longitude,
                                accuracy: pos.coords.accuracy.toFixed()
                            },
                            timestamp: pos.timestamp
                    }
            };
var netPOS;
var infoWindow = new google.maps.InfoWindow({map: map});
// Try HTML5 geolocation.
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        pos = {
            lat: position.coords.latitude,
            lng: position.coords.longitude
        };
        infoWindow.setPosition(pos);
        infoWindow.setContent('You are here');
        map.setCenter(pos);
        var netPOS = JSON.stringify(posZae(position));
        $.ajax({
            type: 'POST',
            data:  { 'pos' : pos},
            url: '/wp-content/themes/honolulu/template-userslocation.php'
        });
    },
    function() {
        handleLocationError(true, infoWindow, map.getCenter());
    });
} else {
    // Browser doesn't support Geolocation
    handleLocationError(false, infoWindow, map.getCenter());
};

它应该将数据发送到我有此代码的template-userslocation.php

<?php
    /**
    * Template Name: template-userslocation
    */

    $lat = isset($_POST['pos']['lat']) ? $_POST['pos']['lat'] : null;
    $lng = isset($_POST['pos']['lng']) ? $_POST['pos']['lng'] : null;
?>

我没有错误,但如果我对页面收费则没有数据。页面和控制台中没有任何内容。

解决:

问题在于它是在Wordpress中制作的,Wordpress有自己的方式来处理AJAX。

Here the info

4 个答案:

答案 0 :(得分:1)

编辑2

我不知道任何WordPress插件或PHP。 lat / lng是否出现在网络/服务器上?无论如何试试这个: -

var posZae = function(pos){
                    return {
                                lat: pos.coords.latitude,
                                lng: pos.coords.longitude,
                    }
            };
var infoWindow = new google.maps.InfoWindow({map: map});
// Try HTML5 geolocation.
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        var pos = posZae(position);
        var netPOS = JSON.stringify(pos);
        infoWindow.setPosition(pos);
        infoWindow.setContent('You are here');
        map.setCenter(pos);
        $.ajax({
            type: 'POST',
            data:  { 'pos' : netPos},
            url: '/wp-content/themes/honolulu/template-userslocation.php'
        });
    },
    function() {
        handleLocationError(true, infoWindow, map.getCenter());
    });
} else {
    // Browser doesn't support Geolocation
    handleLocationError(false, infoWindow, map.getCenter());
};

编辑1

好的,这会对你有任何熟悉的声音吗?

    // Try HTML5 geolocation.
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        pos = {
            lat: position.coords.latitude,
            lng: position.coords.longitude
        };
        infoWindow.setPosition(pos);
        infoWindow.setContent('You are here');
        map.setCenter(pos);
        var netPOS = JSON.stringify(pos4Net(position));
        $.ajax({
            type: 'POST',
            data:  { 'pos' : netPOS},
            url: '/wp-content/themes/atripby/template-userslocation.php'
        });

原始邮件:

不确定你在哪里&#34; pos&#34;被宣布。也许使用VAR进行本地化可以帮助实例化它?

我对位置对象的性质有同样/类似的问题,并在尝试通过网络传输之前调用以下内容: -

    var pos4Net = 
    function(pos)
    {
        return {
            coords: {
                latitude: pos.coords.latitude,
                longitude: pos.coords.longitude,
                accuracy: pos.coords.accuracy.toFixed()
            },
            timestamp: pos.timestamp
        }
    }

所以var yourPos = pos4Net(position)

答案 1 :(得分:0)

  

没有数据。页面和控制台中没有任何内容。

您的PHP代码将POSTed数据复制到几个变量中。就是这样。

它没有输出任何东西。它没有将变量用于任何事情。

它只是将数据存储在变量中,然后退出(这会破坏变量,因为它们仅在程序执行的生命周期内存在)。

您需要对数据执行某些操作。

你可以直接输出它:

<?php header("Content-Type: text/plain"); echo $lat; echo $lng; ?>

......这不是非常有用,但可以作为演示。

您的JavaScript对响应没有任何作用。

(如上所述,回复并不包含任何内容,因此您需要先修复PHP。)

您的JavaScript中没有成功处理程序,因此当浏览器获得响应时,您的代码不会对其执行任何操作。这就是浏览器中没有显示任何内容的原因。

    url: '/wp-content/themes/atripby/template-userslocation.php'
}).done(function(data) { console.log(data); });

...会在浏览器的开发者工具控制台中显示结果。

答案 2 :(得分:0)

首先安装你的lat。和郎。检查你是否得到任何结果然后在ajax中使用以下代码

data:  { 'lang' : coordinates , 'lat': coordinate},

然后在目标文件中使用$ _POST ['lant']和$ _POST ['lang']

答案 3 :(得分:-1)

ajax函数正在发送pos这是一个对象,但你在php脚本中使用数组表示法来访问lat / lng。

也许如果你做了

$.ajax({
    type: 'POST',
    data:  { lat:pos.lat, lng:pos.lng },
    url: '/wp-content/themes/atripby/template-userslocation.php'
});

然后,您可以在PHP中尝试

$lat=!empty( $_POST['lat'] ) ? $_POST['lat'] : null;
$lng=!empty( $_POST['lng'] ) ? $_POST['lng'] : null;