Ajax insert or update data

时间:2015-03-13 作者:Gil

我一直在浏览类似的问题,还没有让这个功能发挥作用。我正在跟踪用户制作嵌入式vimeo视频并插入数据或更新数据的进度。

帖子页面上的JS:

        $.ajax({
        type: \'POST\',
        dataType: \'json\',
        url: ajaxurl,
        data: { 
            \'action\': \'vimeo_progress\',
            \'progress_percent\': progress,
            \'progress_seconds\': seconds,
            \'course_id\': courseID },
        success : function(data) {
            console.log(data); //FOR DEBUG
        },
        error : function(data, textStatus, XMLHttpRequest) {
            console.log(\'updateProgress failed!\'); //FOR DEBUG
            console.log(textStatus); //FOR DEBUG
        }
    });
功能。php

    add_action( \'wp_ajax_nopriv_vimeo_progress\', \'store_vimeo_progress_callback\' );
function store_vimeo_progress_callback() {  
    // don\'t track if user is not logged in
    if ( ! is_user_logged_in() )
        return false;

    $user_id = get_current_user_id();
    $vimeo_percent = sanitize_text_field($_POST[\'progress_percent\']);
    $vimeo_seconds = sanitize_text_field($_POST[\'progress_seconds\']);
    $xxx_course_id = sanitize_text_field($_POST[\'course_id\']);

    $table_name = $wpdb->prefix . "course_video_progress";

    // Run WP query to retrieve user progress
    $row = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $table_name WHERE user_id = %d AND course_id = %d;", $user_id, $xxx_course_id) );

    if ($row) {
        $wpdb->replace( 
            $table_name, 
            array( 
                \'id\' => $row->id,
                \'user_id\' => $user_id, 
                \'course_id\' => $xxx_course_id,
                \'progress_percent\' => $vimeo_percent,
                \'seconds_played\' => $vimeo_seconds
            ), 
            array( 
                \'%d\',
                \'%d\',
                \'%f\', 
                \'%d\' 
            ) 
        );
    } else {
        $wpdb->insert( 
            $table_name, 
            array( 
                \'user_id\' => $user_id, 
                \'course_id\' => $xxx_course_id,
                \'progress_percent\' => $vimeo_percent,
                \'seconds_played\' => $vimeo_seconds
            ), 
            array( 
                \'%d\',
                \'%d\',
                \'%f\', 
                \'%d\' 
            ) 
        );
    }

    $response = array( \'success\' => true, \'data\' => \'hello\' ); //if $data is set
    wp_send_json_success( $response );
    exit;
}
不会将任何数据插入表中,也不会更新任何数据。我确实从回调中获得“成功”,但数据返回为0。

编辑:我刚刚意识到http://localhost/wordpress/wp-admin/admin-ajax.php 返回0,所以可能ajax调用甚至没有找到我的函数,只是返回0?

2 个回复
SO网友:kingkool68

如果省略datatype jQuery代码JS部分中AJAX调用的参数将尝试确定服务器响应的数据类型。当您调试时,这会很有帮助,因为您可以echo PHP中AJAX回调的值。您可以在console.log() 声明。

另一种方法是启用WP_DEBUG_LOG 在您的wp-config.php 文件然后你可以打电话给error_log() PHP中的函数,该函数将记录对debug.log 在您的/wp-content/网站的文件夹。看见http://codex.wordpress.org/Debugging_in_WordPress#WP_DEBUG_LOG

这两个技巧应该可以帮助您调试AJAX回调的运行情况。

SO网友:mrbobbybryant

我要给出的另一个技巧是使用wp\\u send\\u json\\u error()。https://codex.wordpress.org/Function_Reference/wp_send_json_error

这样,如果出现问题,你可以传递信息。这些json消息将在您直接命中端点时显示。例如,如果您有用户权限检查,如果他们没有权限输出wp_send_json_error(\'you do not have permission to do this\')或者类似的东西。

结束

相关推荐

WordPress插入不能与AJAX一起使用

我试图在wordpress中以表单形式输入插入数据,并希望使用ajax来实现这一点。如果没有ajax,它工作得很好,但当我使用ajax时,按submit按钮得到的结果为0,数据不会插入到数据库中。下面是我的代码。Html代码位于表单标记之间,如下所示<form id=\"insertform\" action=\"\" method=\"post\"> <input id=\"user\" style=\"height: 30px;\" name=\"user\" type=\"