我花了几个月的时间试图弄清楚如何获取用户的地理位置并将其传递到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行空
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
});