我創建了一個 AJAX 請求,將資料發送到我的插件,然后我的插件將提交一份作業申請。提交表單時,它回傳的頁面是空白而不是 0,并且控制臺顯示 admin-ajax.php 的 400 錯誤。
這段代碼現在已經從 Plamen 的建議中更新了,我意識到 $data 變數現在可能沒有做任何事情
我的表單的操作如下:
<form method="POST" id="job-application-form" action="<?php echo admin_url( 'admin-ajax.php' ) ?>" class="flex lg:flex-row flex-col flex-wrap">
這是我的表單頁面上的代碼:
<script type="text/javascript">
jQuery(function($) {
$('#job-application-form').on('submit', function(e) {
var form = $(this);
var data = form.serialize();
$.post(form.attr('action'), data, function(response) {
console.log(form.attr('action'));
alert('Got this from the server: ' response);
});
e.preventDefault();
return false;
});
});
</script>
這是我的插件功能的代碼:
<?php
add_action( 'wp_ajax_submit_post', 'submit_post' );
add_action( 'wp_ajax_nopriv_submit_post', 'submit_post' );
function submit_post() {
$actual_link = parse_url('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
$parts = explode('/', $actual_link['path']);
$job_id = $parts[count($parts)-1];
$curl = curl_init();
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$postcode = $_POST['postcode'];
// $info = $_GET['info'];
$data = array(
'firstName' => $firstName,
'lastName' => $lastName,
'email' => $email,
'phone' => $phone,
'address' => $postcode,
);
$payload = json_encode($data);
var_dump($job_id);
var_dump($payload);
$token_url = "/home/.token";
$file = fopen($token_url, "r") or die("Unable to open job ads file!");
$access_token_new = fread($file,filesize($token_url));
curl_setopt_array($curl, array(
CURLOPT_URL => The API URL . $job_id .'/applications',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $access_token_new,
'Content-Type: application/json',
),
));
fclose($file);
$response = curl_exec($curl);
curl_close($curl);
var_dump($response);
wp_die();
}
?>
從我收集的內容來看,我的 ajax 請求找不到我的插件功能,但我不確定我是否搞砸了命名或發生了什么。
uj5u.com熱心網友回復:
您需要以兼容的格式傳遞 HTTP POST 請求的負載。
最簡單的方法是將您的代碼更改為以下內容:
添加一個名為“action”的隱藏欄位,如下所示:
<form method="POST" id="job-application-form" action="<?php echo admin_url( 'admin-ajax.php' ) ?>" class="flex lg:flex-row flex-col flex-wrap">
...
<input type="hidden" name="action" value="submit_post">
</form>
然后像這樣改變你的 JavaScript 實作,不需要用 PHP 獲取 Ajax URL,你在<form>action 屬性中有它:
jQuery(function($) {
$('#job-application-form').on('submit', function(e) {
var form = $(this);
var data = form.serialize();
$.post(form.attr('action'), data, function(response) {
console.log(form.attr('action'));
alert('Got this from the server: ' response);
});
e.preventDefault();
return false;
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522369.html
