【问题标题】:In AJAX, do I have to init the class?在 AJAX 中,我必须初始化类吗?
【发布时间】:2013-08-11 11:53:45
【问题描述】:

我正在尝试在不刷新页面的情况下做某事(但我认为我这样做的方式需要刷新页面。最终目标是没有页面刷新。

我有两点不对,一是基本的html,二是不懂Ajax。

HTML 问题

当我点击该元素旁边的链接时:

<label class="checkbox">
    <input type="checkbox" name="aisis_options[package_Aisis-Related-Posts-Package-master]" 
    value="package_Aisis-Related-Posts-Package-master" checked=""> 
        Aisis-Related-Posts-Package-master <a href="#">(Disable)</a>
</label>

然后执行这段 JS:

(function($){   
    $(document).ready(function(){
        $('a').click(function(){
          var el = $(this).prev('input[type="checkbox"]');
          if(el.is(':checked')){
               el.prop('checked',false);   
          }
        });
    }); 
 })(jQuery);

取消选中它,但页面刷新并滚动到顶部。我假设有一种 js 方法可以阻止这种情况,或者可能是我在 &lt;a href=""&gt; 部分中有“#”的愚蠢?

Ajax 问题

我根本不懂ajax,除了从客户端向服务器传递信息,所以我在上面的JS中添加了以下内容:

(function($){   
    $(document).ready(function(){
        $('a').click(function(){
          var el = $(this).prev('input[type="checkbox"]');
          if(el.is(':checked')){
               el.prop('checked',false);   
          }
          $.ajax({
              url  : <?php CORETHEME_ADMIN_TEMPLATE_HELPER . 'UncheckPackageThemeHelper.php';?>,
              type : 'GET',
              data : { 'element_name' : el.prop('name') }       
          });
        });
    }); 
 })(jQuery);

然后写了下面的类:

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;
        }
    }
}

基本上,当我单击选中对象复选框旁边的禁用链接时,我希望看到 element_name 回显 - 如果可能,不进行页面刷新。

我的问题是,除了取消选中元素 which I got from the answer to this question 的 java 脚本之外,我不知道我所做的任何事情是否正确。

请帮忙,想法是:单击禁用,禁用复选框,通过将元素名称传递给 PHP 来回显元素名称 - 如果可能,无需刷新页面。

更新

这个类永远不会被实例化。曾经。任何地方。这个想法是通过单击来完成这一切,我想单击禁用,让它将元素名称传递给类,然后该类在不刷新页面的情况下全部回显变量...

【问题讨论】:

    标签: php html ajax jquery


    【解决方案1】:

    HTML 问题:正如 Arun 所说,使用 e.preventDefault() 来防止默认点击操作。

    AJAX 问题: 我注意到您没有回显您的网址。改变

    <?php CORETHEME_ADMIN_TEMPLATE_HELPER . 'UncheckPackageThemeHelper.php';?>
    

    <?php echo CORETHEME_ADMIN_TEMPLATE_HELPER . 'UncheckPackageThemeHelper.php';?>
    

    【讨论】:

    • 这是一个 WordPress 的东西,它会为我自动回声。那不是我的问题,我的问题是这将如何工作?我创建的 ajax 将如何实例化类、传递变量然后将变量回显到屏幕上,如类中所见,所有这些都无需刷新页面?你从来没有解释过。另请参阅更新@Ankit
    【解决方案2】:

    HTML 问题。我认为问题在于您没有阻止a的默认操作

    (function($){   
        $(document).ready(function(){
            $('a').click(function(e){
              var el = $(this).prev('input[type="checkbox"]');
              if(el.is(':checked')){
                   el.prop('checked',false);   
              }
              e.preventDefault();//prevent the default action
            });
        }); 
     })(jQuery);
    

    【讨论】:

      【解决方案3】:

      虽然您当然可以使用 Arun 的答案,但您只需删除 href 属性,它就不会转到页面顶部和/或刷新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 2017-03-13
        相关资源
        最近更新 更多