我在编辑后的页面(管理端)上有一个链接,可以调用AJAX和jQuery在我的functions.php
页链接已连接并调用jQuery,但我似乎无法调试从jQuery调用的函数内部发生的事情。我希望单击的链接删除帖子的自定义元数据(这是一种自定义帖子类型),然后删除一个文件。
下面是末尾带有删除功能的代码:
//Add AJAX functionality to post.php to delete files
add_action(\'admin_enqueue_scripts\', \'my_admin_enqueue_scripts\');
add_action(\'wp_ajax_delete_meta\', \'delete_pdf_and_metadata\');
//Add my custom JS to the header of admin
function my_admin_enqueue_scripts($hook) {
global $current_screen;
if ( \'post.php\' != $hook )
return;
wp_register_script(\'my-scripts\', get_template_directory_uri() . \'/js/custom/my-scripts.js\' );
wp_enqueue_script(\'my-scripts\');
wp_localize_script(\'my-scripts\', \'wp_ajax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
}
function delete_pdf_and_metadata() {
global $post;
//delete metadata
$the_id = intval($_POST[\'the_id\'] );
$the_pdf = get_post_meta($post->ID, $the_id);
delete_post_meta($post->ID, $the_id, $the_pdf[\'name\']);
//TODO Delete PDF
}
以下是jQuery调用:
jQuery(document).ready(function($) {
$(\'.delete_pdf\').each(function(i,e) { //grab the class delete-pdf
var id = $(this).attr(\'id\').replace(/delete-/, \'\');
var li = $(this).closest(\'li\');
$(this).click(function(){
$.post(ajaxurl, { action: \'delete_meta\', the_id: id }, function(data){
return id;
});
});
});
});
使用FireBug时,我看到的是响应为0。调试函数内部发生的事情的最佳方法是什么
delete_pdf_and_metadata()
通过jQuery调用?
谢谢
最合适的回答,由SO网友:s_ha_dum 整理而成
您没有回应任何内容,因此不会得到太多AJAX响应。实际上,使用AJAX所做的就是用Javascript加载网页。如果页面没有打印任何内容,则您将看不到任何内容。您不需要从AJAX返回任何内容,但如果不返回,您将很难确定您的操作是否成功。
如果您需要返回信息,即使是为了调试,只要echo
it,或var_dump
信息技术您将能够看到echo
ed或var_dump
ed满足于FireBug。请注意,如果您的AJAX内容应该是类似JSON的内容,那么这种调试黑客会破坏它。
此外,看起来您希望AJAX调用返回一个ID。您需要在delete_pdf_and_metadata
函数,或者构建一个JSON对象并响应它。
SO网友:Ralf912
如果您有足够的经验,请编写数据库记录器。这可能是一个具有数据库连接和一些读/写/更新方法的简单类
class DB_Logger
{
// not needed if you use the WordPress Database
private $db_name = \'database\';
private $db_table = \'tablename\';
private $db_user = \'username\';
private $db_password = \'password\';
private $db_host = \'localhost\';
// instance of WordPress\' $wpdb
private static $db = null;
private static $connection = null;
public function __construct(){
if( null === self::$connection )
$this->connect();
}
public function connect(){
global $wpdb;
if( null === $this->db )
$this->db = $wpdb;
[or connect to another, none WordPress database]
}
public function write( $msg = \'\' ){
[write message to database]
}
public function read( $type = \'all\' ){
[read message)s) from database]
}
public function erase( $type = \'all\' ){
[delete message(s) from database]
}
}
在php文件中包含该类,并将消息记录到数据库中
include_once \'path/to/your/class/class-db_logger.php\';
$logger = new DB_logger();
[some code]
$logger->write(
\'$var at line \' . __LINE__ . \' in file \' . __FILE__ . \': \' . var_export( $var, TRUE )
);
使用一点PHP和一点Ajax,您现在可以定期从数据库请求您的除错信息,并将其显示在管理栏、页眉或页脚中。
FireBug是一个很好的工具,但调试信息会随着下一页的重新加载而丢失。有时,通过更改代码来查看事物是如何变化的可能会有所帮助。