यह पता चला है कि मैं एक वर्डप्रेस प्लगइन बना रहा हूं जिसमें मुझे वर्डप्रेस की "admin_ajax.php" फ़ाइल में AJAX बनाने की आवश्यकता है, लेकिन अनुरोध भेजते समय, क्लाइंट मुझे त्रुटि 400 (खराब अनुरोध) देता है और मैं नहीं करता किस कारण से समझें।
कैप्चर
https://i.stack.imgur.com/5SiDd.png
https://i.stack.imgur.com/tPD6o.png
जावास्क्रिप्ट:
$.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);
});
अजाक्स 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();
}
?>
2 जवाब
यदि आप 400 त्रुटि (खराब अनुरोध) प्राप्त करने के कारण यहां समाप्त होते हैं, तो इसका कारण AJAX अनुरोध करना हो सकता है, जब उपयोगकर्ता लॉग इन नहीं होता है।
आपको अपना कोड से बदलना होगा
wp_ajax_my_action', 'my_action' );
प्रति
wp_ajax_nopriv_my_action', 'my_action' );
शायद यह किसी और की मदद करता है।
कोड आपके अजाक्स हैंडलर को पंजीकृत करता है, लेकिन जब आप इसे केवल wp_enqueue_scripts पर चलाते हैं, तो पहले ही बहुत देर हो चुकी होती है और wp_ajax_nopriv_ हुक पहले से ही चल रहे होते हैं।
वर्डप्रेस अजाक्स के बारे में अधिक जानें:
https://codex.wordpress.org/AJAX_in_Plugins https://developer.wordpress.org/plugins/javascript/ajax/