WordPress中的AJAX,将坐标数据发送到MySQL并显示为MAP

时间:2017-12-07 作者:Caesar

我花了几个月的时间试图弄清楚如何获取用户的地理位置并将其传递到MySQL,以及在地图上用标记显示后如何将其传递到MySQL。我已经在通过ajax将数据传递给php方面遇到了困难。并在stackoverflow中进行搜索和研究。看来我的代码是正确的。

AJAX似乎有一种与WORDPRESS协作的特殊方式。

下面是中存在的代码template-maps.php:

  var pos;
  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);
            $.ajax({
                type: \'POST\',
                data:  { action : \'my_action\', pos : pos},
                url: \'/wp-admin/admin-ajax.php\'
            });
        },
        function() {
            handleLocationError(true, infoWindow, map.getCenter());
        });
    } else {
        // Browser doesn\'t support Geolocation
        handleLocationError(false, infoWindow, map.getCenter());
    };
我必须用WordPress Codex写些什么才能让我的AJAX工作?

这里是我到目前为止所做的更改,为add创建了一个插件function my_function ():

<?php

    add_action( \'wp_ajax_my_action\', \'my_function\' );
    add_action( \'wp_ajax_nopriv_my_action\', \'my_function\' );

    $translation_array = array(
        \'admin_uri\' => admin_url(\'admin-ajax.php\') ,
    );
    wp_localize_script( \'script-handle\', \'object_name\', $translation_array );

    function my_function(){

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


       var_dump($_POST[\'pos\']);

    }

?>
下面是我从插件中得到的通知:

注意:wp\\U localize\\u脚本调用不正确。在wp\\u enqueue\\u脚本、admin\\u enqueue\\u脚本或login\\u enqueue\\u脚本挂钩之前,不应注册或排队脚本和样式。有关详细信息,请参阅WordPress中的调试。(此消息是在版本3.3.0中添加的。)在//wp包括/功能。php在线4146

还有这个:

注意:未定义索引:pos in//wp内容/插件/zaeplug用户位置/zaeplug用户位置。php第26行空

1 个回复
SO网友:Johansson

您不能也不应该直接ping主题或插件文件夹中的任何PHP文件。它不安全,而且最重要的是,由于您无法访问WordPress的核心,它几乎永远不会工作。

相反,创建一个管理Ajax处理程序并在那里处理代码。

要创建一个主题,您只需将这些行添加到主题的functions.php 文件:

add_action( \'wp_ajax_my_action\', \'my_function\' );
add_action( \'wp_ajax_nopriv_my_action\', \'my_function\' );

function my_function(){
    // Your php code here
}
现在,将ajax请求更改为ping管理ajax。php文件:,并在数据中包含操作:

$.ajax({
    type: \'POST\',
    data:  { action : \'my_action\', pos : pos},
    url: \'/wp-admin/admin-ajax.php\'
});
但是,我建议您使用wp_localize_script 通过admin_url() 到Ajax函数。

假设您已按以下方式将JS文件排入队列:

add_action( \'wp_enqueue_scripts\', \'my_localization_function\');
function my_localization_function(){
    // Enqueue your script
    wp_enqueue_script( \'script-handle\', \'my-script-url\' );
}
然后可以对其进行本地化。将脚本排入队列后添加以下内容:

$translation_array = array(
    \'admin_uri\' => admin_url(\'admin-ajax.php\') ,
);
wp_localize_script( \'script-handle\', \'object_name\', $translation_array );
现在,您的Ajax调用可以是:

$.ajax({
    type: \'POST\',
    data:  { action : \'my_action\', pos : pos},
    url: object_name.admin_uri
});

结束

相关推荐

WordPress AJAX-由于响应中的换行符,操作失败

例如,当我使用仪表板时,添加一个类别。请求按预期返回有效的XML,但它前面有一个换行符,导致DOMParser() 失败。我不确定在哪里进行调试,它发生在一个站点上,而不是另一个站点上(不同的服务器,不同的主题)。我已经检查过了,主题的php文件都没有任何字符<?php 没有结束于?>有什么建议吗?