【发布时间】:2013-03-28 01:13:20
【问题描述】:
所以我正在尝试构建一个非常简单的东西——一个具有状态和区域的表单,当您选择一个状态时,它会填充区域列表。我的表单有两个菜单,#select-region(状态)和#select-area。这是我的 .js 文件中包含的 jQuery 代码:
jQuery(document).ready(function() {
jQuery("#select-region").change(function(){
//alert(jQuery("#select-region").val());
regionID = jQuery("#select-region").val();
jQuery.ajax({
type: 'POST',
url: 'http://dev.sitename.com/wp-admin/admin-ajax.php',
data: {
action: 'get_area_menu',
region_id: regionID,
},
success: function(data, textStatus, XMLHttpRequest){
jQuery("#select-area").html('');
jQuery("#select-area").append(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}
});
});
});
'get_area_menu()' 函数在我的functions.php 文件中。代码如下:
function get_area_menu($region_id){
$areas = get_areas($region_id);
$menu_output = "<option>" . count($areas) . "</option>";
foreach($areas as $area) {
$menu_output = $menu_output . "<option value=" . $area['area_id'] . ">" . $area['name'] . "</option>";
}
die($menu_output);
}
add_action('wp_ajax_get_area_menu', 'get_area_menu');
add_action('wp_ajax_nopriv_get_area_menu', 'get_area_menu');
`
现在,我已经验证了在将 region_id 传递给它时,上述函数中调用的“get_areas()”函数可以正常工作,但由于某种原因,region_id 变量没有被传递给 get_area_menu()来自 AJAX 调用。 FWIW,我已经将脚本排入队列并将其本地化(尽管我仍然不知道这实际上意味着什么),这段代码靠近 functions.php 的顶部:
wp_enqueue_script('jquery');
wp_enqueue_script('sitename', get_template_directory_uri() . '/scripts/sitename.js');
wp_localize_script( 'sitename', get_template_directory_uri() . '/scripts/sitename.js', $params);
伙计们,我已经无计可施了。我错过了什么?
【问题讨论】:
-
我不熟悉 Wordpress,所以这可能不适用。但是您是否尝试过传入
$_POST['region_id']而不是$region_id?这是在 PHP 中访问 POST 变量的标准方式。 -
因为我使用 jQuery 来获取 #select-region 更改时的当前值 (regionID = jQuery("#select-region").val();),所以该变量是实际上并未发布,因此不在“POST”范围内。也许我错了?没有任何地方实际使用 $_POST['region_id'] 因为在这种情况下,$region_id 被用作函数中的属性。
-
我不明白。在您的
$.ajax电话中,您有这个:data: { action: 'get_area_menu', region_id: regionID}。这意味着$_POST['action']和$_POST['region_id']应该存在于PHP 端。否则,您还希望从哪里获得 region_id 的值? -
AJAX 调用是在下拉菜单更改上执行的,而不是表单发布,那么这些数据如何存在于服务器上的发布范围内?使用以下代码在 JS 文件中获取该下拉列表的值:'regionID = jQuery("#select-region").val();'
-
也许我误解了“数据”的工作原理。我认为“动作”是您尝试在服务器上调用的函数,所有后续属性/变量都只是传递给该函数。换句话说,'data: { action: 'get_area_menu', region_id: regionID}' 应该将“regionID”(在 JS 中设置)的值作为名为“region_id”的属性传递给 PHP 函数 get_area_menu(),不是吗?
标签: jquery ajax wordpress forms