要传递在查询中使用的‘Variable’的AJAX url值

时间:2013-07-18 作者:mantis

我正在修改一个插件,希望从选择列表中获取一个值,并根据所选值自动填充文本区域。

php代码来自一个名为wpf-addusers.php 但该文件不是直接显示的。显示此信息的页面的(绝对)url为http://localhost:8888/dev_wordpress/wp-admin/admin.php?page=mfgroups&mingleforum_action=usergroups&do=add_user_togroup.

我的javascript(ajax)如下所示:

jQuery(function(jQuery){
jQuery(“#用户组”)。更改(函数(){

  jQuery.ajax({
      type: "GET",
      url: "wpf-addusers.php",
      data: { usergroup: jQuery(this).find(\':selected\').val() }
      }).done(function( results ) {
      console.log( results );
      });

   });


 });
当我使用“wpf addusers.php”时,我得到一个404错误,如下所示:GET http://localhost:8888/dev_wordpress/wp-admin/wpf-addusers.php?usergroup=The+Freedom 404 (Not Found)

The+Freedom 是我想在php代码中使用的值:

if(function_exists(\'home_url\')){
$usergroups = $mingleforum->get_usergroups();
$team_title = $_GET[ \'usergroup\'];
$team_id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_title = \'" . $team_title . "\'" );
$players = get_users( array (
\'meta_key\' => \'team-meta\',
\'meta_value\' => $team_id
));

echo "<div class=\'wrap\'>
 <h2><img src=\'$image\'> Add users</h2>";
echo "<form name=\'add_usertogroup_form\' action=\'admin.php page=mfgroups&mingleforum_action=usergroups\' method=\'post\'>
<table class=\'widefat\'>
  <thead>
    <tr>
      <th>User group</th>
      <th>User names </th>
    </tr>
  </thead>
  <tr class=\'alternate\'>

    <td>"; echo "<select name=\'usergroup\' id=\'usergroup\'>
        <option selected=\'selected\' value=\'add_user_null\'>".__("Select User group", "mingleforum")."
        </option>"; 


        foreach($usergroups as $usergroup){
        echo "<option value=\'". $usergroup->id ."\'>" . $usergroup->name . "</option>";

            }
            echo "</select></td>

     <td>"; echo "<textarea name=\'togroupusers\' rows=\'10\' columns=\'60\'>";
            if ( isset($_GET[ \'usergroup\'])){
                foreach($players as $player) {
                    echo $player->display_name . ", ";
                }
            }
            echo "</textarea>";

    echo "<br/>
    <i>The above players will be added to the group.</i></td>
  </tr>
  <tr class=\'alternate\'>
    <td colspan=\'2\'><input class=\'button\' name=\'add_user_togroup\' type=\'submit\' value=\'".__("Add users", "mingleforum")."\' /></td>
  </tr>
</table>
</form>
</div>";
}
有人知道我如何将“usergroup”传递给我的php代码吗?

顺便说一下,我的javascript在管理端正确排队。所以我想我没有针对ajax的特定处理函数?(这不是问题,只是旁注)

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

您说页面URL是http://localhost:8888/dev_wordpress/wp-admin/admin.php?page=mfgroups&mingleforum_action=usergroups&do=add_user_togroup 但您正在尝试加载http://localhost:8888/tankards_wordpress/wp-admin/wpf-addusers.php?usergroup=The+Freedom. 这些不匹配的地方有很多,但我不能百分之百确定两者之间的关系。你的问题在这方面不清楚。

然而,即使你得到了.php 要通过这样的直接访问加载的文件--http://localhost:8888/tankards_wordpress/wp-admin/wpf-addusers.php?usergroup=The+Freedom--, 这行不通。如果像WordPress不加载那样直接加载文件,则意味着不会定义WordPress函数,并且该文件依赖于WordPress函数。

您应该使用AJAX API 因此,对于WordPress上下文中使用的几乎所有AJAX,可能不包括需要极高性能的情况。

将PHP写入如下回调函数:

add_action(\'wp_ajax_my_action\', \'my_action_callback\');

function my_action_callback() {
    // your PHP
    die(); // this is required to return a proper result
}
并通过my_action 作为AJAX的一部分POST 数据,如下所示:

var data = {
    action: \'my_action\',
    whatever: 1234
};

// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
$.post(ajaxurl, data, function(response) {
    alert(\'Got this from the server: \' + response);
});
(Both example code blocks more or less cribbed from the Codex)

结束