通过Admin AJAX调用进行Metabox克隆的问题

时间:2012-01-22 作者:Dale Sattler

我创建了一个相当简单的类,用于在wordpress admin中处理元盒的创建。

我已经设置了该类,以便该类的每个实例都表示一个新的元盒定义。每个类实例都将其元盒定义存储为一个私有类变量,该变量在整个类中用于绘制元盒字段等。到目前为止,一切正常。有一个单独的类变量,用于定义metabox是否可重复。如果是,metabox类会添加必要的操作和javascript来处理admin ajax调用。

现在,这个对管理ajax的调用导致了一个奇怪的问题。出于某种原因,admin ajax调用总是返回第一个创建的元盒的元盒定义,而不管哪个元盒实际调用admin\\u ajax方法。

这就是我设置管理ajax操作的方式。条件仅检查元盒是否支持可重复的元素。

if($this->is_dynamic){
            add_action(\'wp_ajax_get_cloned_content\', array(&$this,\'ref_AJAX_get_cloned_content\'));  
        }
下面是我的管理ajax调用。

public function ref_AJAX_get_cloned_content( ){ 
        check_ajax_referer(\'get_cloned_content\', \'nonce\');
        $newFormData =  json_encode($this->renderForm($this->m_box[\'fields\']));

        $success_response = new WP_Ajax_Response();
        $success_response->add(array(
                    \'what\' => \'mbox\',
                    \'data\' => $newFormData,
                    \'supplemental\' => array(\'fielddata\' => $newFormData)
        ));
        $success_response->send();      
        exit;   
    }
这是对管理ajax处理程序的javascript调用。

                    var data = {
                        action: \'get_cloned_content\',
                        nonce: <?php echo wp_create_nonce(\'get_cloned_content\');?>,
                      };


                    $.post(ajaxurl, data, function(response) {
                        var res = wpAjax.parseAjaxResponse(response, \'ajax-response\');
                        jQuery.each( res.responses, function() { 
                           console.log(this.supplemental.fielddata);
                         });
                    });
调用ajax方法和获取响应没有问题,问题在于如何获取实际的类实例字段数据。我不知道为什么wordpress不会从管理ajax调用返回我的类实例变量值。

你知道为什么会发生这种情况吗?

我可以通过使用不同的非管理ajax方法来克隆metabox字段来解决这个问题,但我仍然想知道为什么我的头撞到墙上后会出现这个问题。

1 个回复
SO网友:kaiser

1st 这不是WP问题,而是jQuery问题。

2nd 我曾经为meta-box开发过自己的一组类,大约一个月前我停了下来,放弃了它们,转而支持RW Meta Box 图书馆元框是一个大问题,包括保存数据、构建无休止的字段类型等等,这样就更容易把时间放在一起,让事情变得更大。目前我们有21个叉子。我强烈鼓励你马上加入。我们甚至还有克隆字段,而且离克隆字段集不远。

3rd 你的问题是each();. 这不适用于DOM就绪后未创建的对象(您不能将任何内容附加到此时不存在的对象,对吗?)。你可以试着live();, 但会遇到严重的内存问题。在jQuery 1.7之前,您应该使用delegate(); 现在应该on();. 看看js文件克隆。如果您还想开发自己的操作系统,请在RW Meta Box库中使用js。

P.s.:Fork is ♥ - 如果你能在那里投入你的努力,我将不胜感激,正如我上面提到的那样,我们仍然缺少野外群克隆。

P、 附言:Surroundings 如果你坚持使用RW Meta Box:GitHub团队一直都很好,甚至赞助我们在TenderApp. 因此,我们有一个支持渠道和一个相当酷的知识库

结束

相关推荐

AJAX search posts and pages

我正在尝试制作一个插件,在这里我需要创建一个AJAX搜索。Im使用中描述的方法http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/ 执行ajax调用。到目前为止一切都很好。问题是不确定如何在我的ajax函数中检索搜索结果。第一次尝试使用WP\\U查询,如下所示:$query= new WP_Query( array( \'post_type\'=> \'any\',\'post_status\' => \'publ