JQuery未调用php函数

时间:2020-01-18 作者:Enaizi

我似乎无法让jquery在插件中调用php处理函数。请帮忙。TQ公司

更新:我更新了代码。它现在正在工作。

我的php文件

// INIT
function nizam_scripts() {
    wp_enqueue_script( \'nizam_ajax\', plugin_dir_url( __FILE__ ) . \'/nizam_plugin.js\', array( \'jquery\' ) );
    wp_localize_script(\'nizam_ajax\', \'nizam_handler\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );    
}
add_action(\'wp_print_scripts\', \'nizam_scripts\'); 


// SHORTCODE
function nizam_shortcode(){
    $html .= \'<input size="10" type="text" class="ajax_bahagian" name="bahagian" value="100">\';
    $html .= \'<button class="btn_add" onclick="window.location.href = \\\'javascript:void(0)\\\';">Add</button>\';                                  
    return $html;       
}      
add_shortcode( \'nizam_plugin\', \'nizam_shortcode\' );

// HANDLER     
function nizam_handler() {
    if ( isset($_REQUEST) ) {
        $bahagian  = $_REQUEST[\'bahagian\']; 
        echo $bahagian;
    }  

    // Always die in functions echoing ajax content
    wp_die();
}

add_action( \'wp_ajax_nizam_handler\', \'nizam_handler\' );
add_action( \'wp_ajax_nopriv_nizam_handler\', \'nizam_handler\' );
我的jQuery

    jQuery(document).ready( function($) {

    $(\'.btn_add\').on(\'click\', function(event) {
        var bahagian = $(\'.ajax_bahagian\').val();

        $.ajax({
            url: ajaxurl, 
            data: {
                \'action\'    : \'nizam_handler\', 
                \'bahagian\'  : bahagian
            },
            success:function(data) {
                // This outputs the result of the ajax request
                console.log(data);
            },
            error: function(errorThrown){ 
                console.log(errorThrown);
            }
        });      

    });          


}); 

1 个回复
最合适的回答,由SO网友:Adam 整理而成

对于登录用户,请使用:

  • wp_ajax_{$action}
对于已注销的用户,请使用:

  • wp_ajax_nopriv_{$action}
您的代码当前正在使用wp_ajax_{$action} -> wp_ajax_nizam_handler 这会将请求限制为已登录(已验证用户)。

如果您在发出请求时已注销,您将永远无法进入回调。

如果要以注销用户为目标,请为wp_ajax_nopriv_{$action} 上下文

示例:

function wpse_356672_nizam_handler_handler() {

    wp_send_json_success( [
        \'results\'  => \'MY_VALUE\',
        \'custom_property\'  => \'ANOTHER_VALUE\',
        // etc...
    ] );

}

add_action(\'wp_ajax_nizam_handler\', \'wpse_356672_nizam_handler_handler\' );
add_action(\'wp_ajax_nopriv_nizam_handler\', \'wpse_356672_nizam_handler_handler\' );
注意:您可以同时使用两个挂钩,也可以同时使用一个或另一个挂钩,具体取决于您的用例。

提示:不要使用die 建议您使用wp_die 但更重要的是wp_send_json_success, wp_send_json_errorwp_send_json.

建议阅读:

相关推荐

Foreach生成的定制税务查询,每个查询都有一个AJAX“Load More”按钮

我正在遍历自定义分类术语,为每个术语创建一个WP\\u查询,然后在前端显示帖子。我也在尝试适应this helpful tutorial(和附带的注释)为每个循环迭代添加一个ajax加载更多按钮。这就是我认为此问题与WP StackExchange上其他帖子的不同之处:在循环查询中添加加载更多按钮,而不是在一个页面上添加单个查询或简单的多个硬编码(非循环)WP\\U查询。原始教程使用wp_localize_script 将php数据传递给注册的;将jQuery脚本排队,但由于我需要为每个循环创建唯一的变量