IT

Wordpress admin-ajax.php 400의 잘못된 요청

itgroup 2023. 3. 9. 21:59
반응형

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도 해당 헤더를 추가하도록 하십시오.

  1. URL 사용 시/wp-admin/admin-ajax.phplocalhost 또는 localhost/wordpress를 사용하면 이상할 수 있으므로 로컬 도메인을 가지려고 합니다.서버에서는 정상적으로 동작합니다.

  2. 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

반응형