用内容通过AJAX打开一个Thinbox


11

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

我怎样才能使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');
    }
  });
...

所以OpenMyThickboxjavascript函数应该可以实现我想要的功能:

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

使用admin_url('admin-ajax.php'); 网址
Bainternet,2011年

我得到空白页。即使我输入google.com
onetrickpony

Answers:


6

的第二个参数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; ?>' );

我猜想您需要手动传递操作和任何其他查询var(如上),否则您的请求只是针对admin-ajax.php,当您正在寻找的是...时admin-ajax.php?action=getTheContent&someothervar=someothervalue,因此是add_query_arg上面的用法。 。

为了澄清:

以下电话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

上面的代码示例中引用的函数:


难道不是$_get['action']因为WordPress ajax呼叫在寻找$_post['action']吗?还是我错了?
Bainternet 2011年

通常它将在ajax回调中$_POST$_REQUEST内部,除非您明确设置要使用的ajax请求函数,否则get在thickbox调用的上下文中,我们使用查询字符串,该字符串仍应显示在$_REQUEST(因为通常包含两者$_GET$_POST)..
t31os 2011年

不,我要问的是我是否使用add_query_arg添加的args作为帖子发送或获取?
Bainternet 2011年

都不是,add_query_arg将一个字符串追加(URL的)与查询参数,它不会做任何发送,所以我不知道我理解你的问题..
t31os

更新了我的答案..
t31os 2011年

3

搞砸JavaScript和PHP不是很聪明。这个答案只会造成混乱。

tb_show是javascript add_query_arg是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_query_arg


除了其中包含<?php ?>标签之外,它与解决方案有何不同?如果仅此而已,请对解决方案进行修改以更正它。无需添加单独的答案来解释另一个答案有什么问题。这就是社区编辑受到赞赏的原因。
kaiser 2012年

@kaiser编辑通常不欢迎更改帖子的含义。作为单独的答案,这没关系。
fuxia

@toscho这到底是如何改变含义的?我正在纠正添加丢失的位
kaiser 2012年

Bayen在这里指出错误是正确的,我在混合PHP和Javascript,我真的应该早点发现。我已经对我的答案进行了必要的更改,并感谢您提供反馈意见Bayen(我想知道何时出错)。
t31os 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.