gpt4 book ai didi

javascript - jQuery Ajax 将数据发布到同一页面 PHP 不起作用

转载 作者:行者123 更新时间:2023-12-03 08:50:57 25 4
gpt4 key购买 nike

注意:这是一个 jQuery 编码练习,我不允许使用插件或其他模块。

问题:我有一个简单的表单,我想在其上处理 POST 表单数据 - 同一页面处理。

同一页面上的 HTML + PHP:

<?php
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";
?>
<head>
<title>jQuery Forms</title>
<link rel="stylesheet" href="css/global.css">
</head>
<body>
<form id="myForm" action="">
<input type="text" placeholder="Email" id="email" name="email">
<span class="error">Email not entered</span><br />
<input type="password" placeholder="Password" id="pword" name="pword">
<span class="error">Password not entered</span><br />
<input type="text" placeholder="First Name" id="fname" name="fname">
<span class="error">First Name not entered</span><br />
<input type="text" placeholder="Last Name" id="lname" name="lname">
<span class="error">Last Name not entered</span><br />
<input type="submit" value="Submit">
</form>
<script src="jquery.js"></script>
<script src="form.js"></script>
</body>
</html>

注意:从这里有关使用 ajax 进行同一页面处理的其他答案中,我读到应该为此忽略 url 属性。

jQuery form.js:

// jQuery form validation
$(document).ready(function(){

// field mapping
var form_fields = {
'email' : 'email',
'pword' : 'password',
'fname' : 'first name',
'lname' : 'last name'
};

// ajax data
var ajaxData = {};

// make sure form fields were entered
$('#myForm').on('submit', function(e){

for (var field in form_fields) {
if (!$('#' + field).val()) {
$('#' + field).next().addClass('error_show');
} else if ($('#' + field).val()) {
$('#' + field).next().removeClass('error_show');
ajaxData[field] = $('#' + field).val();
}
}
console.log(ajaxData)
$.ajax({
type : 'POST',
data : ajaxData,
success : function() {
console.log('success');
},

error : function(xhr, status, errorThrown) {
console.log('error');
}
});
return false;

});

});

当我在表单字段中输入数据时,我从 jQuery 得到以下内容:

ajaxData: 对象 {email: "robert@stackoverflow.com", pword: "123", fname: "Robert", lname: "Rocha"}

并显示一条成功消息,表明已成功。然而,当我打印 GLOBAL 变量以查看哪些数据传递到页面时,它们显示为空:

Array
(
[_GET] => Array
(
)

[_POST] => Array
(
)

[_COOKIE] => Array
(
)

[_FILES] => Array
(
)

[GLOBALS] => Array
*RECURSION*
)

最佳答案

您的代码工作正常 - 我已将其拉下来并在本地运行它,实际上它确实将该示例数据发布到您的服务器。

如果您使用的是 Firefox 或 Chrome(或者实际上任何浏览器都应该没问题),您将需要打开检查器/Firebug 并查看您的网络请求。

您正在通过http 请求发送表单数据,因此您在浏览器中打开的实际页面不会更改或重新加载。相反,您将通过“网络”面板或在 JavaScript 控制台中看到从当前页面发出的请求(如果您启用显示 XMLHttpRequests记录 XMLHttpRequests)。

这是一个屏幕截图,向您展示我的意思: enter image description here

<小时/>

如果您希望通过重新加载将其提交回同一页面,您可以更新表单提交处理程序以执行以下操作:

// make sure form fields were entered
$('#myForm').on('submit', function (e) {

for (var field in form_fields) {
if (!$('#' + field).val()) {
$('#' + field).next().addClass('error_show');
} else if ($('#' + field).val()) {
$('#' + field).next().removeClass('error_show');
ajaxData[field] = $('#' + field).val();
}
}
if ($('#myForm').find('.error_show').length) {
e.preventDefault();
}
});

请注意,我删除了 AJAX 代码,只是在未正确设置所有值的情况下阻止表单提交。

在您当前的 html 中,这会将其作为发布数据添加到您的页面 URL。如果您实际上想通过 POST 方法发送它(推荐),您将需要使用该设置更新您的表单:

<form id="myForm" action="" method="post">
...

另请查看 jQuery validate plugin .

关于javascript - jQuery Ajax 将数据发布到同一页面 PHP 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com