WordPress 中带有 jQuery 的 AJAX:AJAX 调用未将属性值传递给 PHP 函数
Posted
技术标签:
【中文标题】WordPress 中带有 jQuery 的 AJAX:AJAX 调用未将属性值传递给 PHP 函数【英文标题】:AJAX with jQuery in WordPress: AJAX call not passing property value to PHP function 【发布时间】: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(),不是吗?
【参考方案1】:
我唯一能看到的是在你的get_area_menu
函数中更改这一行
$areas = get_areas(isset($_POST['region_id']) ? $_POST['region_id'] : $region_id);
【讨论】:
我完全迷路了。如果未发布表单,region_id 将如何进入发布范围?特别是因为 PHP 代码使用 $region_id 作为传入的属性。 你使用 POST 从 Ajax 调用这个函数来传递参数:)以上是关于WordPress 中带有 jQuery 的 AJAX:AJAX 调用未将属性值传递给 PHP 函数的主要内容,如果未能解决你的问题,请参考以下文章
IE8/9 中带有 jQuery 和 XDomainRequest 的 CORS
判断一个元素是不是有一个带有 jQuery 的 CSS 类