Wordpress admin-ajax.php 400의 잘못된 요청
wordpress admin-ajax.php 파일의 이상하고 짜증나는 동작이 있습니다.Ajax 요청을 하면 400개의 오류 잘못된 요청이 반환됩니다.
(function( $ ) {
var ajaxscript = { ajax_url : 'mydomain.com/wp-admin/admin-ajax.php' }
$.ajax({
url : ajaxscript.ajax_url,
data : {
action : 'cart_clb',
id : 1
},
method : 'POST',
success : function( response ){ console.log(response) },
error : function(error){ console.log(error) }
})
})(jQuery)
그리고 내 기능 안에.php
add_action( 'wp_ajax_post_cart_clb', 'cart_clb' );
add_action( 'wp_ajax_nopriv_post_cart_clb', 'cart_clb' );
function cart_clb(){
echo json_encode($_POST);
die();
}
위와 같이 요청을 실행할 때:
mydomain.com/wp-admin/admin-ajax.php 400 (Bad Request)
{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
누가 좀 도와줄래?감사해요.
먼저 protocol(또는 적어도 protocol-independent 형식)과 함께 full 및 absolute url을 사용합니다.
var ajaxscript = { ajax_url : '//mydomain.com/wp-admin/admin-ajax.php' }
둘째, 당신의 아약스 액션명은 php 콜백 함수명이 아니라 후크의 동적 부분입니다.wp_ajax_{action_name} / wp_ajax_nopriv_{action_name}
따라서 다음과 같이 해야 합니다.
data : {
action : 'post_cart_clb',
id : 1
},
당신의 코드를 수정했습니다.이것 좀 보세요.
(function( $ ) {
var ajaxscript = { ajax_url : 'mydomain.com/wp-admin/admin-ajax.php' }
$.ajax({
url : ajaxscript.ajax_url,
data : {
action : 'post_cart_clb',
id : 1
},
method : 'POST', //Post method
success : function( response ){ console.log(response) },
error : function(error){ console.log(error) }
})
})(jQuery)
WordPress ajax 구문 wp_ajax_{your_action_name} wp_contract_nopriv_{your_action_name}
wp_ajax_nopriv_(action)
는 로그인하지 않은 사용자에 대해 실행됩니다.따라서 방문자와 로그인 사용자 모두에게 프런트 엔드로 기동하도록 하려면 , 다음의 조작은 다음과 같습니다.
add_action( 'wp_ajax_my_action', 'my_action' );
// 로그인 사용자용
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
// 로그인하지 않은 사용자용
admin-ajax.php는 액션 기능이 등록되지 않은 경우와 액션 파라미터가 비어 있는 경우의 2가지 상황에서 Bad Request 헤더를 반환합니다.
같은 에러가 발생하여 문제는 add_action('wp_ajax_nopriv'...)을 잊어버린 것입니다.wp_ajax_nopriv만 설정되어 있기 때문에 관리자 네스팅으로 로그인 했을 때 동작하지 않았습니다.
저 같은 경우에는 클래스 베이스의 어프로치를 사용하고 있습니다.그리고 그 문제는 제가 wp_ajax_request를 컨스트럭터에서 사용하고 있었기 때문이라는 것을 알게 되었습니다.
클래스 내에서 ajax 메서드를 사용하는 경우 wp_ajax_ 핸들을 클래스 외부(메인 플러그인 파일에 쓰기)로 이동하고 클래스 이름과 메서드 이름을 전달합니다.예를 들어 다음과 같습니다.
add_action( 'wp_ajax_your_handle', [ 'Class_Name', 'function_name' ] );
add_action( 'wp_ajax_nopriv_your_handle', [ 'Class_Name', 'function_name' ] );
사용하기만 하면 된다
add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
자세한 내용은 아래 링크를 참조하십시오.
https://codex.wordpress.org/AJAX_in_Plugins
Vanilla JavaScript에서 이 헤더를 POST 요청에 추가하지 않으면 잘못된 요청을 받습니다.
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
따라서 jQuery도 해당 헤더를 추가하도록 하십시오.
URL 사용 시
/wp-admin/admin-ajax.php
localhost 또는 localhost/wordpress를 사용하면 이상할 수 있으므로 로컬 도메인을 가지려고 합니다.서버에서는 정상적으로 동작합니다.fetch 또는 XMLHttpRequest를 사용하여 요청을 더 잘 제어하고 json이 formData 개체로 데이터를 보낼 때 데이터를 보내지 마십시오.
const formData = new FormData();
fetch(loader.ajax_url, { method: "POST", body: formData, }).then((resp) => { console.log(resp); }).catch((resp) => { console.log(resp); });
다른 조합과 함께 사용할 수 있지만 거의 완벽하다는 것을 알게 되었습니다.
언급URL : https://stackoverflow.com/questions/48025825/wordpress-admin-ajax-php-400-bad-request
'IT' 카테고리의 다른 글
stdin, start, ssh, stderr 및 stdout 오류로 인해 vgrant up이 실패함 (0) | 2023.03.09 |
---|---|
기능하는 setState 내에서 이벤트 대상이 null입니다. (0) | 2023.03.09 |
Angular에서 HTML로 모듈의 상수에 직접 액세스하는 방법JS (0) | 2023.03.09 |
Wordpress 오류: TimThumb 오류가 발생했습니다. (0) | 2023.03.09 |
'java.util' 유형의 값을 역직렬화할 수 없습니다.String에서 (0) | 2023.03.09 |