如何在插件管理区使用AJAX?

时间:2013-09-03 作者:sun

我试着用ajax从插件中的php获取一些信息。但获取对未定义函数的错误调用。Ajax

jQuery.ajax({
        type: "POST",
        url: "<?php echo plugins_url();?>/tester/inc/test.php",
        data: { param: \'st1\' }
      }).done(function( msg ) {
             alert( "Data Saved: " + msg );
     });
警报中出错

Data Saved: <br />
<font size=\'1\'><table class=\'xdebug-error xe-fatal-error\' dir=\'ltr\' border=\'1\' cellspacing=\'0\' cellpadding=\'1\'>
<tr><th align=\'left\' bgcolor=\'#f57900\' colspan="5"><span style=\'background-color: #cc0000; color: #fce94f; font-size: x-large;\'>( ! )</span> Fatal error: Call to undefined function add_action() in E:\\wamp1\\wamp\\www\\wp_twentythirteen\\wp-content\\plugins\\tester\\inc\\test.php on line <i>7</i></th></tr>
<tr><th align=\'left\' bgcolor=\'#e9b96e\' colspan=\'5\'>Call Stack</th></tr>
<tr><th align=\'center\' bgcolor=\'#eeeeec\'>#</th><th align=\'left\' bgcolor=\'#eeeeec\'>Time</th><th align=\'left\' bgcolor=\'#eeeeec\'>Memory</th><th align=\'left\' bgcolor=\'#eeeeec\'>Function</th><th align=\'left\' bgcolor=\'#eeeeec\'>Location</th></tr>
<tr><td bgcolor=\'#eeeeec\' align=\'center\'>1</td><td bgcolor=\'#eeeeec\' align=\'center\'>0.0007</td><td bgcolor=\'#eeeeec\' align=\'right\'>254944</td><td bgcolor=\'#eeeeec\'>{main}(  )</td><td title=\'E:\\wamp1\\wamp\\www\\wp_twentythirteen\\wp-content\\plugins\\tester\\inc\\test.php\' bgcolor=\'#eeeeec\'>..\\test.php<b>:</b>0</td></tr>
</table></font>
测试。php

<?php
function aj()
{
 echo "hello";
echo plugins_url();
}
add_action(\'wp_ajax_my_action\',\'aj\'); 
add_action(\'wp_ajax_nopriv_myFunction\',\'aj\'); 

 ?>
我认为错误表示好像我不在wordpress内。有什么想法吗?

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

avoid the use of require(\'../../../wp-load.php\'); and things like that 如其他答案所示。您应该始终使用Wordpress AJAX方式。这真的很简单,您将在PHP脚本中加载所有Wordpress引擎。

只有三个考虑因素:

你必须send the ajax request to ...wp-admin/admin-ajax.php. ajaxurl是一个javascript变量always defined in the admin area 并且它包含指向管理ajax的正确url。当前Wordpress安装中的php文件。您可以在管理区域的javascript中直接使用ajaxurl。我看到您将ajax请求发送到不同的URL

  • 在发送的数据中you have to inclue the action var. action var包含插件/主题之前注册的PHP函数的名称。此函数将处理ajax请求。我已经阅读了您的代码,您在PHP中定义了ajax函数,但javascript中缺少了该操作the admin area 正如您所问的管理区。在前端有点不同,但仍然很容易;如果您需要一个在前端发出ajax请求的示例,只需说,我就会发布它
  • 示例:

    在PHP(插件/主题)中:

    add_action(\'wp_ajax_my_action\', \'my_ajax_action_function\');
    
    function my_ajax_action_function(){
      
        $response = array();
        if ( ! empty($_POST[\'param\'] ) ) {
             $response[\'response\'] = "I\'ve get the param and its value is " . $_POST[\'param\'] . \' and the plugin url is \' . plugins_url();
        } else {
             $response[\'response\'] = "You didn\'t send the param";
        }
    
        header( "Content-Type: application/json" );
        echo json_encode($response);
     
        // Don\'t forget to always exit in the ajax function.
        exit();
    
    }
    
    您的后端javascript应该是这样的(请记住,ajaxurl总是由Wordpress在管理区域中定义):

    jQuery.ajax({
        type: "POST",
        url: ajaxurl,
        data: { action: \'my_action\' , param: \'st1\' }
      }).done(function( msg ) {
             alert( "Data Saved: " + msg.response );
     });
    

    SO网友:s_ha_dum

    你是not 在WordPress上下文中。您已经直接加载了插件文件。将加载该文件,但不会加载WordPress的其余部分。

    使用AJAX API. 这就是它的意义所在。不要使用不再必要的黑客require/include正在读取WordPress核心文件(wp-load.php, wp-blog-header.php, wp-settings.php, 取决于您阅读的“教程”)

    如果the examples in the Codex 还不足以让你开始numerous examples on this site 包括…在内30-something 我写过——this one, 特别是,这可能是几个“重复问题”之一。

    SO网友:J.D.

    您是对的,因为您进行AJAX调用的方式,WordPress没有被加载。正确的方法是使用ajaxurl 作为URL,并将您的操作设置为my_action 通过将其作为action 请求数据中的参数:

    jQuery.ajax({
        type: "POST",
        url: ajaxurl,
        data: { action: \'my_action\', param: \'st1\' }
      }).done(function( msg ) {
             alert( "Data Saved: " + msg );
     });
    
    请参见AJAX in Plugins 了解更多信息。

    结束

    相关推荐

    AJAX联系人表单的问题

    我在联系方式上有问题。它们可以在html站点中找到,但每当我在WordPress中尝试它们时,都会失败。我已经将问题缩小到url:设置。例如 $.ajax( { type: \"POST\", url: \"contact.php\", data: str, success: function (msg) { WordPress找不到联系人。php文件。我发现