0

更新问题以更好地反映社区的支持

基于社区支持,我将 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  : "http://localhost/wordpress/wp-content/themes/Aisis-Framework/CoreTheme/AdminPanel/Template/Helper/UncheckPackageThemeHelper.php",
              type : 'GET',
              data : { 'element_name' : el.prop('name') },      
              success: function(data, textStatus, jqXHR){
                console.log(data);
              },
              error: function(jqXHR, textStatus, errorThrown ){
                console.log(jqXHR, textStatus, errorThrown);
              } 
          });
          e.preventDefault();
        });
    }); 
 })(jQuery);

生成的 PHP 类是这样的:

class CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper{

    private $_element_name = null;

    public function __construct(){
        if(isset($_GET['element_name'])){
            $this->_element_name = $_GET['element_name'];
            echo $this->_element_name;
        }
    }
}

网络选项卡显示我通过激活 Jquery 得到了一些输出,如下所示:

在此处输入图像描述

控制台没有吐出任何错误,但没有回显元素名称。我已经阅读了Jquery Ajax API,到目前为止,我所做的一切似乎都是正确的。然而,我没有得到想要的结果。

注意:响应选项卡是空的....换句话说,我没有收到回复。

4

3 回答 3

7

您没有将事件传递给您的点击处理程序。

采用。

$('a').click(function(e){
   // Your code
});

      $.ajax({
          url  : "<?php echo CORETHEME_ADMIN_TEMPLATE_HELPER_URL . 'UncheckPackageThemeHelper.php'; ?>",
          type : 'GET',
          data : { 'element_name' : el.prop('name') },      
          success: function(result) {
            console.log(result)
          },
          error: function(jqXHR, textStatus, errorThrown ){
             console.log(jqXHR, textStatus, errorThrown);
          } 
      });
于 2013-08-12T15:00:58.613 回答
0

简化情况。稍等片刻,将您的 AJAX 处理器文件 (UncheckPackageThemeHelper.php) 更改为如下所示:

取消选中PackageThemeHelper.php

<?php
    $test = $_POST['element_name'];
    $r = 'PHP received: [' .$test. ']';
    echo $r;
    die();

此外,将您的 AJAX 成功函数更改为如下所示:

      success: function(result) {
        alert(result);
      },

至少,这将向您表明您的 AJAX 正在通过。

然后,开始将内容添加回您的 AJAX 处理器文件(一次一个或两个)并不断回显某些内容,以便您可以发现错误发生的位置。

于 2013-08-12T15:40:49.700 回答
-2

所以我做错了很多事情。但这对我来说是唯一可行的方法 - 如果您有更好的解决方案,请发表您的评论。

在课堂上,我必须这样做:

class CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper{

    private $_element_name = null;

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

new CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper();

无法使用生成的 Ajax 在 .phtml 文件中实例化该类,否则请求永远不会被发回。另请注意,json_encode您不能将常规变量传递回 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  : "http://localhost/wordpress/wp-content/themes/Aisis-Framework/CoreTheme/AdminPanel/Template/Helper/UncheckPackageThemeHelper.php",
              type : 'GET',
              data : { 'element_name' : el.prop('name') },      
              success: function(data, textStatus, jqXHR){
                console.log(data);
              },
              error: function(jqXHR, textStatus, errorThrown ){
                console.log(jqXHR, textStatus, errorThrown);
              } 
          });
          e.preventDefault();
        });
    }); 
 })(jQuery);

返回的数据是我所期望的:"aisis_options[package_RelatedPosts]"

这个答案有几个问题 - 一个我不明白为什么我必须在其写入的文件中实例化类,两个不知道为什么我必须在一个类中编码响应,但不是当它只是一个“脚本小子”文件。

于 2013-08-12T16:25:48.137 回答