Wordpress AJAX in header.php

时间:2014-08-30 作者:wordwannabe

我目前正在学习Wordpress AJAX,但不断收到错误消息(因此没有执行success函数)

目前我已经更改了标题。php(第二十三个主题),包括发送AJAX请求的JavaScript。

<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js"></script>
<![endif]-->
<?php wp_head(); ?>
<script type="text/javascript">

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

    //AJAX
    $.ajax({

        type: "GET",
        dataType: "json",
        url: "<?php echo admin_url(\'admin-ajax.php\'); ?>;",
        data: {
            action: \'xn_get_event\'
        },
        success: function(response){
            alert("Yes");
        },
        error: function(response){
            alert("omg!");
        }

    }); //END OF AJAX (SEND REQUEST)
}); //END OF READY FUNCTION
</script>
然后在主题文件夹中,我包含了另一个名为json提要的PHP文件。php内部的functions文件夹(so theme\\u name/functions/json feed.php),这里我包含了以下代码:

header(\'Content-Type:application/json\');


//Needs to include wp-load.php file! 
if(file_exists(\'../../../../wp-load.php\')):
    include \'../../../../wp-load.php\';
else: //Double checking in case the path is wrong.
    include \'../../../../../wp-load.php\';
endif;

//AJAX Handler
add_action(\'wp_ajax_nopriv_xn_get_event\', \'xn_get_event\');
add_action(\'wp_ajax_xn_get_event\', \'xn_get_event\');

function xn_get_event(){

    echo "Wow!";

}
然后,当我访问该网站时,它会不断提醒“天哪!”对我来说,我不知道为什么它是不断返回错误响应!

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

tons 关于使用Ajax的问题,所以您的问题可以很容易地标记为重复,但我看到了太大的错误,我不能对您说,如果不解释您的错误,问题就重复了。

Wordpress中的Ajax是在admin Ajax中处理的。php文件,您是否正确发送了ajax请求(请参阅url Ajax调用的参数)。因此,您不需要包括wp负载。php,Wordpress已经加载include 它在函数中。php文件或任何子文件wp_send_json 以及已执行退出的相关功能); 最后)要获得快速工作示例,请在函数中包含此代码。php文件并修复URL参数中的输入错误:

add_action(\'wp_ajax_nopriv_xn_get_event\', \'xn_get_event\');
add_action(\'wp_ajax_xn_get_event\', \'xn_get_event\');

function xn_get_event(){

    echo \'Wow!\';
    exit;

}
此外,建议不要在标头中直接包含内联javascript。当javascrpt具有依赖项时,如您的代码,可以使用php或任何其他模板文件。您永远不知道依赖关系是如何处理的。例如,您的javascript依赖于jQuery,但jQuery文件可以移动到页脚,而jQuery代码将停止工作,因为它是在加载jQuery之前打印的。使用适当的Wordpress函数包含javascript并管理依赖项。更好的代码是:

add_action(\'wp_ajax_nopriv_xn_get_event\', \'xn_get_event\');
add_action(\'wp_ajax_xn_get_event\', \'xn_get_event\');

function xn_get_event(){

    $data = array( \'message\' => \'Wow!\' );
    wp_send_json( $data );

}

add_action(\'wp_enqueue_scripts\', \'cyb_enqueue_scripts\');
function cyb_enqueue_scriptss() {

    //Register my script
    //Update with the correct path to javscript file
    wp_register_script(\'my-script\', get_stylesheet_directory_uri(). \'/js/my-script.js\', array( \'jquery\' ) );

    //Enqueue scripts and dependencies
    wp_enqueue_script( \'jquery\' );
    wp_enqueue_script( \'my-script\' );

    //Localize js variables to be used in my-script.js
    $scriptData = array(
                      \'ajaxurl\' => admin_url(\'admin-ajax.php\')
                     );
    wp_localize_script( \'my-script\', \'my_script_data\', $scriptData );

}
我脚本的内容。js文件可能类似于:

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

    //AJAX
    $.ajax({

        type: "GET",
        dataType: "json",
        url: my_script_data.ajaxurl,
        data: {
            action: "xn_get_event"
        }
    })
    .done( function( response ) {
            alert( response.message );
    })
    .fail( function( response ){
            alert( "omg!" );
    });
});
有关更多信息,请阅读上的文档WP Ajax API 或者关于using Ajax in Wordpress.

注意:代码未测试。

SO网友:stijn.aerts

尝试使用“完成”而不是“成功”。

此外,包括wp负载不是最佳做法,您将其包括在内的原因是什么?

结束

相关推荐

Admin-ajax.php慢,怎么提速?

与自己的和定制的服务入口点(site.com/wordpress/wp-content/myplugin/rpc.php?…)相比,管理ajax的速度似乎慢得令人难以置信。在我们的自定义服务条目中,我们实际上只加载:wp config。php&;wp负载。php,然后我们的RPC处理程序=120ms,用于RPC请求。在管理ajax时。php将其950ms用于相同的请求。我们能做些什么来加快速度吗?我们可以禁用与我们的请求无关的过滤器和插件吗?我们想切换到管理ajax,但这样的性能对用户体验来说简直太