Ajax jquery(post) 不将数据传递给 php
Ajax jquery(post) doesn't pass data to php
我正在尝试将数据传递到我的 php 页面:
<?php
var_dump($_POST);
if (isset($_POST['goal']) && isset($_POST['amount'])){
$goal = $_POST['goal'];
$amount = $_POST['amount'];
$array = array(
"goal" => $goal,
"amount" => $amount
);
echo json_encode($array);
}
然而,由于 var_dump $_POST,我一直得到一个空数组,出于某种原因,我的 ajax 没有传递必要的数据。我尝试了 console.logging 我正在使用的字段的值,它们的值是正确的,只是数据没有在 php 页面上传递。
ajax:
<script type="text/javascript">
$(document).ready(function () {
//use button click event
$("#goalBTN").click(function (e){
e.preventDefault();
let amount = $("#amount").val();
let goal = $("#goal_name").val();
$.ajax({
method: "post",
url: "target-modal-code.php",
data:JSON.stringify( {
amount: amount,
goal: goal
}),
contentType:"application/json",
success: function (response){
$("#response").text(response);
console.log(amount);
console.log(goal);
},
error: function(response) {
alert(JSON.stringify(response));
}
})
});
});
</script>
我的表单在模态中:
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="enrollLabel">Change your goal</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form action="target-modal-code.php" name="target-form" id="target-form">
<div class="modal-body">
<form action="">
<div class="mb-3 input-control">
<label for="amount">Cost</label>
<input type="number" class="form-control" id="amount" name="amount"
placeholder="Amount">
<small class="message" id="message-password"></small>
<br>
</div>
<div class="mb-3 input-control">
<label for="goal_name">Goal</label>
<input type="text" class="form-control" id="goal_name" name="goal_name"
placeholder="Goal">
<small class="message" id="message-password"></small>
<br>
</div>
</form>
</div>
<p class="response" id="response"></p>
<div class="modal-footer">
<div class="response">
</div>
<button type="button" id="goalBTN" class="btn btn-warning">Save changes</button>
</div>
</form>
</div>
</div>
格式化发送ajax:
$.ajax({
...
data : {
foo : 'bar',
bar : 'foo'
},
...
});
在您的情况下:更改数据发送格式,如:
data: {
amount: amount,
goal: goal
}
在 firefox 网络开发工具中使用“网络”选项卡进行一些实时测试后更新了答案
问题是当前 ajax 代码由于错误 content-type 而未发送任何元素。让它自动检测content-type。对于 jq ajax,默认值似乎是 contentType: application/x-www-form-urlencoded
,即使您没有特别提供。
所以,这有效:
<script type="text/javascript">
$(document).ready(function () {
//use button click event
$("#goalBTN").click(function (e){
e.preventDefault();
// let amount = $("#amount").val();
// let goal = $("#goal_name").val();
var formData = {
amount: $("#amount").val(),
goal_name: $("#goal_name").val(),
};
$.ajax({
method: "post",
url: "target-modal-code.php",
// datatype:"json",
//data:JSON.stringify(formData),
data: formData,
//contentType:"application/json",
//encode: true,
success: function (response){
$("#response").text(response);
// console.log(amount);
// console.log(goal);
console.log(formData);
},
error: function(response) {
alert(JSON.stringify(response));
}
})
});
});
</script>
经过一些摆弄后,我注意到如果您根本不提供它,它仍然有效 contentType
。 AJAX 不会向服务器发送 GET 或 POST 参数....不知道为什么。我知道这很奇怪,但这就是 jquery ajax.
中的情况
我特意保留了评论,让你看看我都做了什么。
总结一下,
- 不要将表单数据字符串化,
- 不要向 ajax 提供 contentType
要求。
干杯!
我正在尝试将数据传递到我的 php 页面:
<?php
var_dump($_POST);
if (isset($_POST['goal']) && isset($_POST['amount'])){
$goal = $_POST['goal'];
$amount = $_POST['amount'];
$array = array(
"goal" => $goal,
"amount" => $amount
);
echo json_encode($array);
}
然而,由于 var_dump $_POST,我一直得到一个空数组,出于某种原因,我的 ajax 没有传递必要的数据。我尝试了 console.logging 我正在使用的字段的值,它们的值是正确的,只是数据没有在 php 页面上传递。
ajax:
<script type="text/javascript">
$(document).ready(function () {
//use button click event
$("#goalBTN").click(function (e){
e.preventDefault();
let amount = $("#amount").val();
let goal = $("#goal_name").val();
$.ajax({
method: "post",
url: "target-modal-code.php",
data:JSON.stringify( {
amount: amount,
goal: goal
}),
contentType:"application/json",
success: function (response){
$("#response").text(response);
console.log(amount);
console.log(goal);
},
error: function(response) {
alert(JSON.stringify(response));
}
})
});
});
</script>
我的表单在模态中:
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="enrollLabel">Change your goal</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form action="target-modal-code.php" name="target-form" id="target-form">
<div class="modal-body">
<form action="">
<div class="mb-3 input-control">
<label for="amount">Cost</label>
<input type="number" class="form-control" id="amount" name="amount"
placeholder="Amount">
<small class="message" id="message-password"></small>
<br>
</div>
<div class="mb-3 input-control">
<label for="goal_name">Goal</label>
<input type="text" class="form-control" id="goal_name" name="goal_name"
placeholder="Goal">
<small class="message" id="message-password"></small>
<br>
</div>
</form>
</div>
<p class="response" id="response"></p>
<div class="modal-footer">
<div class="response">
</div>
<button type="button" id="goalBTN" class="btn btn-warning">Save changes</button>
</div>
</form>
</div>
</div>
格式化发送ajax:
$.ajax({
...
data : {
foo : 'bar',
bar : 'foo'
},
...
});
在您的情况下:更改数据发送格式,如:
data: {
amount: amount,
goal: goal
}
在 firefox 网络开发工具中使用“网络”选项卡进行一些实时测试后更新了答案
问题是当前 ajax 代码由于错误 content-type 而未发送任何元素。让它自动检测content-type。对于 jq ajax,默认值似乎是 contentType: application/x-www-form-urlencoded
,即使您没有特别提供。
所以,这有效:
<script type="text/javascript">
$(document).ready(function () {
//use button click event
$("#goalBTN").click(function (e){
e.preventDefault();
// let amount = $("#amount").val();
// let goal = $("#goal_name").val();
var formData = {
amount: $("#amount").val(),
goal_name: $("#goal_name").val(),
};
$.ajax({
method: "post",
url: "target-modal-code.php",
// datatype:"json",
//data:JSON.stringify(formData),
data: formData,
//contentType:"application/json",
//encode: true,
success: function (response){
$("#response").text(response);
// console.log(amount);
// console.log(goal);
console.log(formData);
},
error: function(response) {
alert(JSON.stringify(response));
}
})
});
});
</script>
经过一些摆弄后,我注意到如果您根本不提供它,它仍然有效 contentType
。 AJAX 不会向服务器发送 GET 或 POST 参数....不知道为什么。我知道这很奇怪,但这就是 jquery ajax.
我特意保留了评论,让你看看我都做了什么。
总结一下,
- 不要将表单数据字符串化,
- 不要向 ajax 提供 contentType 要求。
干杯!