POST http://localhost/wordpress/wp-admin/admin-ajax.php 400 (Bad Request)
358
1 câu hỏi đã được viết
안녕하세요
현재 워드프레스 강의 들으면서 공부 중인데요
woddy snippets 플러그인을 사용해서 테마가 아닌 곳에서 데이버베이스에 접근해서 데이터를 가지고 오려고 하는데요
이에 php 파일로 작성해서 ajax 테스트 중입니다.
강의 보면서 제대로 한 거 같은데 계속 bad request가 떨어져서요 ㅜ
<?php
function get_by_test() {
$serial = $_POST['key'];
$result =[
'result' => 1,
'message' => $serial,
];
echo json_encode($result);
die();
}
add_action('wp_ajax_get_by_test', 'get_by_test');
add_action('wp_ajax_nopriv_get_by_test', 'get_by_test');
?>
<form>
<table align='center'>
<tr>
<td>
<div align='center'>
<input type='text' id='test' name='test'>
</div>
</td>
</tr>
<tr>
<td>
<button type='button' id='submit-test'>test</button>
</td>
</tr>
</table>
<div id='test-results'></div>
</form>
<script type='text/javascript'>
jQuery(document).ready(function(e) {
jQuery('#submit-test').on('click', function() {
var test = jQuery('#test').val();
console.log(test);
jQuery.post('wp-admin/admin-ajax.php', {
action: 'get_by_test',
key: test
}, function (response) {
console.log(response);
if (response.result === 'success') {
jQuery(e.target)
.text('가져옴')
.attr('disabled', true);
// console.log(response.message);
}
if (response.result === 'fail') {
alert(response.message);
}
}, 'json');
});
});
</script>
Câu trả lời 1
0
안녕하세요 wlalsl_0813님. 질문 감사합니다. ☺
Woody code snippets 플러그인으로 파일 수정 없이 PHP 코드를 입력하려고 하신 것으로 보입니다. 그리고 ajax action을 걸었는데, 뜻대로 안 된 것으로 보이고요.
흥미로운 주제였어요.
결론부터 말하면 해법은 간단합니다. 폼(HTML, JS)과 PHP 액션 코드를 분리해 보세요. PHP add_action 관련 코드는 아래처럼 "코드 실행처(Where to execute the code?)"를 Run Everywhere로 설정하세요. 그리고 폼은 원래대로 숏코드로 노출하시면 됩니다.

왜 이렇게 해야 하는 걸까요?
PHP는 모든 요청/응답 세트가 독립적입니다. 모든 요청/응답 세트가 독립적인 것은 웹의 특성이기도 한데요. 웹의 특성과는 별개로 서버측 언어로서 JAVA 등과는 다른 PHP 고유의 특성이기도 합니다(더 자세한 내용은 https://mytory.net/archives/13147 를 참고하세요).
좀더 자세히 설명하자면요. 위 코드 스니펫을 숏코드로 입력한 페이지(이하 "폼 페이지"라고 부르겠습니다)와 admin-ajax.php는 별개의 프로세스에 놓인다는 것입니다. 즉, admin-ajax.php가 호출될 때는 wlalsl_0813님이 넣으신 add_action이 실행되지 않는다는 것입니다.
다시 정리하면 아래와 같습니다.
1. 폼 페이지를 호출할 때는 add_action이 실행됩니다.
2. 폼 페이지에서 admin-ajax.php를 호출할 때는 add_action이 실행되지 않습니다. 폼 페이지를 로드한 것이 아니니까 당연하지요. 그래서 요청한 ajax 관련 응답할 액션이 없어 400 에러가 발생합니다.
그래서 해법은 폼 페이지에서 ajax 응답을 할 수 있게 만들거나, add_action이 admin-ajax.php 호출시에도 실행되게 하거나 둘 중 하나입니다.
폼 페이지에서 ajax 응답을 하도록 하는 것이 더 복잡하기 때문에 add_action을 어디서나 실행될 수 있게 만드는 것이 낫습니다.
그리고 Woody code snippets 플러그인은 어디서나 실행되는 PHP 코드를 입력하도록 제공을 해주네요. 그것이 위에서 말한 해법입니다.
신선한 질문 주셔서 감사합니다 😊
phpstorm에서 LIve server 기능을 사용하는 방법이 궁금합니다.
0
493
2
클랙식 테마를 운영 중 블럭 테마로 개편할 때
0
372
2
미디어에서 이미지 추가시 시간이 좀 느려서...
0
414
2
wp_editor ($editor_name) 관련
0
397
1
action-test.php 변경관련
0
485
1
APMsetup을 활용
0
436
1
미디어 라이브러리 작동안함문제
0
851
2
목차용 에디터 만들기 강좌에서
0
348
1
고유주소 설정을 바꾸면 글이 안 불러와져요.
0
416
1
JetBrains에서
0
441
3
5:30초 부분 결과값이 bool(false)로 나오는 문제
0
325
1
새 페이지 추가 - 고유주소 변경
0
353
1
the_post가 없으면 무한 루프에 관하여 질문이 있습니다
0
362
1
데이터베이스 선택불가
0
924
3
책 목록 만들기와 아카이브 링크
0
396
2
register_post_type() error
0
280
1
미디어 창에 여러 이미지를 선택하고 렌더링하는 방법
0
273
1
워드프레스에서 액션의 개념
0
402
1
테이블을 직접 만들고 사용하는 방법 문의
1
391
1
수업내용같이 같은 함수를 썼지만 배열을 넣을 수 없습니다 어떤오류인가요?
0
292
2
안녕하세요, 질문드립니다!
0
292
1
안녕하세요
0
234
1
초보질문입니다..
0
353
1
중간중간 수정하시는 과정을 볼 수 있어서 좋네요. 생각하시는 과정을 볼 수 있어 좋은 것 같습니다.
0
146
0

