通过AJAX打开带有内容槽的Thickbox

时间:2011-04-18 作者:onetrickpony

我在TinyMCE编辑器中添加了一个自定义按钮,我想在单击它时打开WP的Thickbox。

我怎样才能使tb_show() 函数使用ajax加载我想要的内容?

// the ajax
add_action(\'wp_ajax_getTheContent\', \'getTheContent\');
function getTheContent(){
  echo \'weqwtegeqgr\'; // <- this should be displayed in the TB
  die();
}
下面是我正在使用的一些编辑器插件代码:

init : function(ed, url) {
  ed.addButton(\'do_stuff\', {
    title : \'Do Stuff\',
    image : url + \'/icon.gif\',
    onclick : function() {
        OpenMyThickbox(\'do_stuff\');
    }
  });
...
所以OpenMyThickbox javascript函数应该执行我想要的操作:

function OpenMyThickbox(tag){
  tb_show(tag, \'...\'); // <- how to load content trough ajax here ?
}

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

的第二个参数tb_show 是URL,因此您需要使用类似。。

<?php 
$ajax_url = add_query_arg( 
    array( 
        \'action\' => \'getTheContent\', 
        \'query_var1\' => \'value1\', 
        \'query_var2\' => \'value2\' 
    ), 
    admin_url( \'admin-ajax.php\' ) 
); 
?>
tb_show(tag, \'<?php echo $ajax_url; ?>\' );
我猜您需要手动传递操作和任何其他查询变量(如上所述),否则您的请求仅用于admin-ajax.php, 当你正在寻找的东西是沿着。。。admin-ajax.php?action=getTheContent&someothervar=someothervalue, 因此add_query_arg 上述用法。。

For clarification:

以下调用add_query_arg ...

add_query_arg( 
    array( 
        \'action\' => \'getTheContent\', 
        \'query_var1\' => \'value1\', 
        \'query_var2\' => \'value2\' 
    ), 
    admin_url( \'admin-ajax.php\' ) 
);
相当于并将产生。。。

http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2
然而现在我已经解释了我自己,我意识到我们不需要绝对URL,因此不需要调用admin_url 在那里。代码应改为。

<?php 
$ajax_url = add_query_arg( 
    array( 
        \'action\' => \'getTheContent\', 
        \'query_var1\' => \'value1\', 
        \'query_var2\' => \'value2\' 
    ), 
    \'admin-ajax.php\'
); 
?>
tb_show(tag, \'<?php echo $ajax_url; ?>\'); 
因此,生成的URL如下所示。。

admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2
上述代码示例中引用的函数:

SO网友:bayen

把javascript和PHP搞乱不是很聪明。这个答案只会让人困惑。

tb\\u show is javascriptadd\\u query\\u arg is PHP

因此,此解决方案仅在PHP中有效,正确的代码是

...
?>
tb_show(
  \'whatever\',
  <?php echo add_query_arg( array(
    \'action\' => \'getTheContent\',
    \'query_var1\' => \'value1\',
    \'query_var2\' => \'value2\',
  ), \'admin-ajax.php\'); ?>
);
<?php
...
在javascript中根本无效,因为我们不能使用add\\u query\\u arg

结束