我正在通過 AJAX 向我的 PHP 腳本提交 POST 請求。瀏覽器工具Network選項卡顯示 POST 資料有值,到達我的 PHP 腳本后,該$_POST值為 true,isset()驗證有效,將$_POST['input']值分配給我的$variables.
然而,我的除錯欄告訴我 PHP 變數之類的$first_name實際上是空的。我在這里感覺很愚蠢,我錯過了什么?
AJAX
$('#newUserSubmit').click(function() {
console.log('Submit button clicked.');
if ($('#addNewUser').valid()) {
console.log('Form on submit is valid');
$.ajax({
type: 'POST',
url: '../../controllers/admin_addNewUser.php',
data: {
action: 'add_new_user',
user_data: $('#addNewUser').serialize()
},
cache: false,
success: function(data) {
alert(data);
console.log('Ajax POST request successful.');
},
error: function(xhr, status, error) {
console.log('Ajax POST request failed.');
console.error(xhr);
}
});
} else {
console.log('Form on submit is invalid');
return false;
}
});
瀏覽器網路選項卡:
Request Data
MIME Type: application/x-www-form-urlencoded; charset=UTF-8
action: add_new_user
user_data: first_name=John&last_name=Doe
PHP
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$debug_msg = 'POST check: passed<br>';
if (isset($_POST['action']) && ($_POST['action'] == 'add_new_user')) {
$debug_msg .= 'ISSET check: passed<br>';
// sanitize
$fn = mysqli_real_escape_string($db, $_POST['first_name']);
$ln = mysqli_real_escape_string($db, $_POST['last_name']);
}
}
回復:
<b>Notice</b>: Undefined index: first_name in <b>/path/to/script/admin_addNewUser.php</b> on line <b>27</b><br />
<br />
<b>Notice</b>: Undefined index: last_name in <b>/path/to/script/admin_addNewUser.php</b> on line <b>28</b><br />
感謝對此的任何幫助,已經盯著這個太久了。謝謝
uj5u.com熱心網友回復:
您發送的data物件錯誤。將Serialize函式作為物件元素發送將按字面意思作為字串發送。所以你的資料 obj 的輸出將類似于
data: {
"action": "add_new_user",
"user_data": "first_name=val&last_name=anotherval"
}
這將被決議為 PHP 端的陣列。
所以你需要更換
data: {
action: 'add_new_user',
user_data: $('#addNewUser').serialize()
}
通過類似的東西:
data: $('#addNewUser').serialize() '&action=add_new_user'
或者在 PHP 端,您需要將user_data查詢字串決議為如下所示的陣列:
if (isset($_POST['user_data'])) {
parse_str($_POST['user_data'], $userData);
// then you can
if (isset($userData['first_name'])) {
// ....
}
}
uj5u.com熱心網友回復:
在您的 ajax 物件中,如果您看到 data 屬性,您將看到 first_name 沒有直接發送。它位于“user_data”變數中。
您需要使用$_POST[user_data]= 來獲取表單的詳細資訊。
此外,如果您將來發現任何此類查詢,只需使用print_r($_POST)查看您從 POST 請求中獲得的資訊即可。
謝謝你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/363955.html
