0

我正在编写一个插件,小部件包含下拉列表,并且需要使用 AJAX 根据前一个下拉列表的选定值从数据库中检索每个连续下拉列表的值。

我将从此处找到的 WordPress 法典中删除稍微修改过的代码版本:http: //codex.wordpress.org/AJAX_in_Plugins

由于某种原因,动作函数要么没有被调用,要么我的代码中有一些错误:

// add action hooks

add_action('wp_footer', 'er_qm_ajax_handler' );
add_action('wp_ajax_repopulate_widget_club_type', 'repopulate_widget_club_type');
add_action('wp_ajax_nopriv_repopulate_widget_club_type', 'repopulate_widget_club_type');

// action for the wp_footer hook to insert the javascript

function er_qm_ajax_handler(){
    ?>
        <script type="text/javascript" >    
        jQuery(document).ready(function($) {
            jQuery('#widget_manufacturer').val('3').change(function(){
                var manufacturer = $("#widget_manufacturer").val();
                var data = {
                    action: 'repopulate_widget_club_type',
                    selected_manufacturer: manufacturer
                };
                // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
                jQuery.post(ajaxurl, data, function(response) {
                    alert('Got this from the server: ' + response);
                });
            });
        });
        </script>
    <?php
}

// The action function

function repopulate_widget_club_type(){
    die("Got to the action");
}

不完全确定我做错了什么,因为我没有从 AJAX 帖子中得到任何回应,我知道 jQuery .change() 正在工作,因为我设置了一些 alert() 来测试它,一旦我改变了下拉列表价值观。

任何想法和帮助将不胜感激,谢谢!

4

1 回答 1

1

您需要像这样定义 ajaxurl 的值:

var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>'

最好在 javascript 的全局范围内定义它,所以在此行之前:

jQuery(document).ready(function($) {
于 2013-07-30T11:44:48.107 回答