首頁>Web>source

有人会指匯為什麼此代碼不起作用.即使資料被更改。 這是我使用的ajax。

jQuery(document).ready(function($) {
    $(".ue_ajax_enabled").on('click', function(event) {
        event.preventDefault();
        /* Act on the event */
        $.ajax({
            url:  ue_ajax.ajax_url,
            type: 'POST',
            /*dataType: 'json',*/
            data: {
                'action'    : 'ue_ajax_enabled',
                'new_username'  : $("#new_username").val(),
                'nonce'     : $("#new_username_nonce_check").val(),
            },
            beforeSend: function () {
                $(".ue_ajax_enabled").text(ue_ajax.beforeMessage);
            },
            success: function (data) {
                console.log('Success');
                console.log(data);
            },
            error: function (data) {
                console.log('Error');
                console.log(data);
            }
        })
        
    });
});

這是我使用的ajax動作钩子。

   add_action( "wp_ajax_ue_ajax_enabled", 'ue_ajax_enabled' );
    
    function ue_ajax_enabled() {
    global $wpdb;
    $currentUser = wp_get_current_user();
    $user_id = $currentUser->ID;
    if (  is_user_logged_in() && wp_verify_nonce( $_REQUEST['nonce'], 'new_username_nonce' ) && ! empty($_REQUEST['new_username'])) {
        // Get name of our users table
        $tableName = $wpdb->prefix . 'users';
        if ( !username_exists( $_REQUEST['new_username'] ) ) {
            // Stripslashes and trim any whitespace, also replace whitespace with underscore
            $newUsername = trim(str_replace(' ', '_', stripslashes($_REQUEST['new_username'])));
        } else {
            echo json_encode( array('username' => 'Username exists, try any other') );
            die();
        }
        // Data to change
        $dataToChange = array('user_login' => $newUsername);
        // Where to Change
        $whereToChange = array('ID' => $user_id); 
        // Change the data inside the table
        $result = $wpdb->update($tableName, $dataToChange, $whereToChange, array('%s'), array('%d'));

        if ($result) {
            echo json_encode( array('update' => true) );
        } else {
            echo json_encode( array('update' => false) );
            die();
        }
        if (ue_send_email_to_user()) {
            $subject = 'Username Changed Successfully ID:' . $user_id;
            $message = "<p>You username has been successfully changed. Your new details are given below.</p>";
            $message .= "<strong>Previous Username:</strong><span>{$currentUser->user_login}</span>";
            $message .= "<strong>New Username</strong><span>{$newUsername}</span>";
            $from = "From: " . get_bloginfo('name');
            wp_mail( array(ue_get_administrators_email(), $currentUser->email), $subject, $message, $from );
        }
    }
    die();
}

该代碼在控製台中引發錯誤訊息,而不是先前設置的ajax成功訊息.任何線索為什麼会發生這種情况。 預先感谢

UPDATE: by commenting datatype the problem solves. But still it shows undefined when i access json.

最新回復
  • 7月前
    1 #

    代碼中的問题很簡單:如果要發送JSON响應,請確保它是有效的JSON响應,即發送正確的 Content-Type 標頭和正確的JSON編碼主體.与 jQuery.ajax() ,虽然您可以省略標题,但是您需要設置 dataTypejson

    function my_ajax_callback1() {
        // Invalid JSON response.
        die();
    }
    function my_ajax_callback2() {
        // Good JSON response with a Content-Type header.
        header( 'Content-Type: application/json' );
        echo json_encode( array( 'update' => true ) );
        wp_die(); // die() works, but wp_die() is better
    }
    

    實際上,在回撥中,您可以簡單地使用 wp_send_json() 像這樣:

    function my_ajax_callback3() {
        wp_send_json( array( 'update' => true ) );
        // No need to call wp_die(), die() or exit().
    }
    

    還有 wp_send_json_success()wp_send_json_error() ,但是在您的JS中,您需要使用 data.data.<key> 而不是 data.<key> ,除了 data.success

    function my_ajax_callback4() {
        // ... your code
        // In your success( data ) JS, you'd access the 'update' value via data.data.update
        if ( $result ) {
            wp_send_json_success( array( 'update' => true, 'msg' => 'Success!' ) );
        } else {
            wp_send_json_error( array( 'update' => false, 'msg' => 'Foo error' ) );
        }
    }
    

    因此,請確保返迴有效的响應資料,尽管不是必需的,但我建議您考虑為您的自定義AJAX操作建立一个自定義REST API端點,並將您的AJAX請求指向该API端點-(預設情况下,该端點始终会返迴

  • 7月前
    2 #

    我认為您在提交未登錄時忘記了wP中的ajax操作.因此,如果您希望它在訪問者和登錄使用者的前端觸發,則可以執行以下操作:

    add_action( 'wp_ajax_my_action', 'my_action' );
    add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
    

    並且在返迴ajax之後,必须使用 die() 响應返迴資料的功能。

    了解更多:https://codex.wordpress.org/AJAX_in_Plugins

  • wordpress:自定義帖子型別簡碼
  • wordpress:如何使用JavaScript在表格中根据州顯示城市?