在Wordpress中正确定位Ajax脚本?

时间:2013-09-15 15:53:31

标签: ajax wordpress jquery wordpress-plugin

我正在尝试在我正在试验的Wordpress插件中使用管理界面(admin.php)进行Ajax管理,该界面当前只是读取表格的内容,并且应该允许在表格中输入一行。目前,我在提交新行时收到以下错误。将ajax脚本放在文件中的位置似乎并不重要。

Uncaught ReferenceError: addtablerow is not defined 

所以,在我的class-plugin.php中,我在Settings菜单(views / admin.php)下创建了一个新页面,我有一个函数可以拉出表的内容并显示它。然后我在表格的底部创建一个新的空行行输入字段,并添加一个div来放置ajax反馈:

<form action="" method="post" id="new_wp_pop_date_modifiers">   
  <input type="hidden" name="action" value="pop_addtablerow_php"/>
  <input type="hidden" name="table" value="wp_pop_date_modifiers"/> 
  <tr class="manage-column">
    <td><input type="text" name="name" placeholder="name"></td>
    <td><input type="text" name="description" placeholder="description"></td>
    <td><input type="text" name="sort_order" placeholder="sort_order"></td>
    <td><input type="Submit"></td>
  </tr>
</form>

<div id="feedback_wp_pop_date_modifiers">Feedback:</div> 
<script type="text/javascript">
  jQuery('#new_wp_pop_date_modifiers').submit(addtablerow);
</script>

php处理程序是文件类-plugin.php,函数pop_addtablerow_php:

function pop_addtablerow_php(){
  global $wpdb;

  $data =array();
  foreach($_POST as $key=>$value) {
    if (($key != 'table') && ($key !='action')) {
        $data[$key] .= $value;
    }
  }

  if($wpdb->insert($_POST['table'],$data)===FALSE){
      echo "Error";
    } else {
      echo "Value '".$name. "' successfully added to '".$table."', row ID is ".$wpdb->insert_id;
  }
  die();
}
add_action('wp_ajax_pop_addtablerow_php', 'pop_addtablerow_php');
add_action('wp_ajax_nopriv_pop_addtablerow_php', 'pop_addtablerow_php');

然后我有我的ajax东西,无论我把它放在哪里,都给我上述错误:

<script type="javascript/text">
function addtablerow(){
    var rowdata = jQuery(this).serialize();
    jQuery.ajax({
        type:"POST",    
        url: "/wp-admin/admin-ajax.php",
        data: rowdata,
        success:function(data){
            jQuery("#feedback_wp_pop_date_modifiers_").html(data);
        }
    });
    return false;
}
</script>

即使我只是将这个内联放在admin.php中 - 我正在为插件创建管理屏幕 - 仍然给了我Uncaught ReferenceError。我不确定我是否只是在错误的地方找到了某些东西,或者某处是否有更大的错误

这是我第一次尝试使用Ajax,所以任何关于我出错的地方都会非常感激

1 个答案:

答案 0 :(得分:0)

可能与某些事情有关:

<script type="text/javascript">
  jQuery('#new_wp_pop_date_modifiers').submit(addtablerow);
</script>

submit参数中的addtablerow是什么?