簡體   English   中英

WordPress的管理員ajax.php 400錯誤的請求

[英]Wordpress admin ajax.php 400 bad request

原來,我正在制作一個Wordpress插件,需要在其中創建一個AJAX到Wordpress的文件“ admin_ajax.php”,但是在發送請求時,客戶端會給我錯誤400(錯誤請求),但我沒有了解是什么原因。

捕獲

https://i.stack.imgur.com/5SiDd.png

https://i.stack.imgur.com/tPD6o.png

使用Javascript:

$.post(window.dibibot.ajax_uri, {
    action: "dibibot_check_message_read",
    to: (window.dibibot.USER_KEYS.split(":")[1]).toString(),
    message_id: JSON.stringify(data.message)
}, function(response) {
    console.log(response);
});

Ajax php函數:

<?php
    function dibibot_check_message_read() {
        global $wpdb;
        $conversation_guid = $_POST['to'];
        $message_id = json_decode($_POST['message_id'], true);

        $conversation = $wpdb->get_var("SELECT metadata FROM " . $wpdb->prefix . "dibibot_conversations WHERE guid = '".$conversation_guid."'");
        $conversation = maybe_unserialize($conversation);
        for ($j=0; $j < count($message_id) ; $j++) { 
            for ($i=0; $i < count($conversation); $i++) {
                if($conversation[$i]['id'] == $message_id[$j]) {
                    $conversation[$i]['status'] = 2;
                    break;
                }
            }
        }
        $result = $wpdb->update($wpdb->prefix . 'dibibot_conversations', [ "metadata" => maybe_serialize($conversation) ], [ "guid" => $conversation_guid]);
        echo $result ? 1 : 0;
        wp_die(); 
    }
?>

該代碼注冊了您的Ajax處理程序,但是當您僅在wp_enqueue_scripts上運行它時,已經為時已晚,並且wp_ajax_nopriv_掛鈎已經運行。

進一步了解Wordpress Ajax:

https://codex.wordpress.org/AJAX_in_Plugins https://developer.wordpress.org/plugins/javascript/ajax/

如果您由於收到400錯誤(錯誤請求)而在此處結束,則可能是由於用戶未登錄時發出了AJAX請求。

您必須更改您的代碼

wp_ajax_my_action', 'my_action' ); 

wp_ajax_nopriv_my_action', 'my_action' ); 

也許它可以幫助其他人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM