Why is this Ajax not working?

时间:2013-08-12 作者:TheWebs

我不确定这样做是否滥用了WordPress和Ajax,但是WP and Ajax Codex a以及Plugin Development with Ajax 似乎不是很有帮助。我创建了以下Ajax情况:

(function($){   
    $(document).ready(function(){
        $(\'a\').click(function(e){
          var el = $(this).prev(\'input[type="checkbox"]\');
          if(el.is(\':checked\')){
               el.prop(\'checked\',false);   
          }
          $.ajax({
              url  : "<?php echo CORETHEME_ADMIN_TEMPLATE_HELPER_URL . \'UncheckPackageThemeHelper.php\'; ?>",
              type : \'POST\',
              data : { \'element_name\' : el.prop(\'name\') },      
              success: function(result){
                console.log(result);
              },
              error: function(jqXHR, textStatus, errorThrown ){
                console.log(jqXHR, textStatus, errorThrown);
              } 
          });
          e.preventDefault();
        });
    }); 
 })(jQuery);
其中指出:单击链接时,我们取消选中复选框并将该元素名称传递给类

在看到unset_package 我的类中的方法

class CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper{

    private $_element_name = null;

    public function __construct(){
        if(isset($_POST["element_name"])){
            $this->_element_name = $_POST["element_name"];
            $this->unset_package();
        }
    }

    public function unset_package(){
        $option = get_option($this->_element_name);
        if(isset($option)){
            $option = \'\';
        }
    }
}

new CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper();
一切正常,直到get_option - 我有500个错误。这意味着get\\u option()方法不存在-在此实例中。I think 如果我取出get_option 以及其他内容,并替换unset_package

具有echo json_encode($this->_element_name); 一切正常,我得到了元素名称。

有人能解释一下为什么这不起作用,也许能告诉我WordPress的正确方法吗?至少可以说,文档非常混乱。

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

通过ajax请求直接加载php文件时(UncheckPackageThemeHelper.php) 它是在WordPress的上下文之外加载的,因此没有可用的WordPress核心功能。

所有WordPress ajax请求都应通过admin-ajax.php. 您可以使用函数打印URLadmin_url:

admin_url( \'admin-ajax.php\' )
何时admin-ajax.php 已加载,WordPress已引导,因此您现在可以访问核心功能。

最后一步是通过action 参数,并将该操作映射到执行该操作时要调用的函数:

add_action( \'wp_ajax_my_action\', \'my_action_callback\' );

结束

相关推荐

Http_host在函数中更改。php

我从$_SERVER[\'HTTP_HOST\'] 中的变量functions.php 我们的子主题文件。我们正在NGINX上运行WordPress 3.5.2,页面线2.4是我们的父主题,我可以在必要时详细介绍一些插件。我们的虚拟主机已设置为响应:*.salesgenie.com 因为我们有几个私有标签子域,这将改变网站的品牌。www.salesgenie.com 将是通用域,但att.salesgenie.com 是品牌子域的一个示例。我需要能够检测到客户端调用的子域,我正试图使用该子域$_