我正在尝试将3个变量传递到我的脚本文件夹中的另一个脚本来查询数据库。
编辑:它会刷新到此页面
http://localhost:8080/procity/changepassword.php?username=asdf&password=a&confirm=a&code=bba7886bec2591db69c58dd315144114
function resetPassword() {
var user = document.getElementById('username').value;
var password = document.getElementById('password').value;
var conf = document.getElementById('confirm').value;
var code = document.getElementById('code').value;
if (code.length == 0 || password.length == 0 ||
user.length == 0 || conf.length == 0) {
alert("Entries empty");
} else if (password != conf) {
alert("Passwords don't match");
} else {
$.ajax({
type: "POST",
url: "scripts/changepassword.php",
data: {Username: user, Password: password, Code: code},
dataType: "json",
success: function(data) { alert("success"); }
});
}
}
<form>
<input id="username" placeholder="Username" name="username" type="text" />
<input id="password" placeholder="Password" name="password" type="password" />
<input id="confirm" placeholder="Confirm Password" name="confirm" type="password" />
<input id="code" placeholder="Code" name="code" type="text" />
<div class="registrationFormAlert" id="incorrectEntry"></div>
<p> </p>
<input class="btn" id="signinbut" onclick="resetPassword()" value="Reset" type="submit" style="width:28%;" />
</form></div>
我的脚本/ changepassword.php:
if (isset($_POST['Username']) && isset($_POST['Password'])&& isset($_POST['Code'])) {
}
问题是这只是刷新当前页面。它不处理请求。
答案 0 :(得分:4)
触发resetPassword()
功能时,您必须阻止默认表单提交操作。由于您正在使用$.ajax
的jQuery,我将使用jQuery来执行此操作:
// add this code after your resetPassword function
$('form').submit(function (e) {
e.preventDefault();
resetPassword();
});
由于我绑定了表单的submit
事件,您可以删除按钮上的onclick
属性:
<input class="btn" id="signinbut" value="Reset" type="submit" style="width:28%;">
此外,您似乎错过了JavaScript中的一些右括号。
$('form').submit(function (e) {
'use strict';
var user = $('#username').val();
var password = $('#password').val();
var conf = $('#confirm').val();
var code = $('#code').val();
e.preventDefault();
if (code.length === 0 || password.length === 0 || user.length === 0 || conf.length === 0) {
alert("Entries empty");
} else if (password !== conf) {
alert("Passwords don't match");
} else {
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize(),
dataType: "json",
success: function (data) {
alert("success");
}
});
}
});
请注意,我已从确认输入中删除了name
属性,以防止序列化。另外,我已为输入添加了required
属性。
<form action='scripts/changepassword.php' method='POST'>
<input id="username" placeholder="Username" name="username" type="text" required />
<input id="password" placeholder="Password" name="password" type="password" required />
<input id="confirm" placeholder="Confirm Password" type="password" required />
<input id="code" placeholder="Code" name="code" type="text" required />
<div class="registrationFormAlert" id="incorrectEntry"></div>
<p> </p>
<button class="btn" id="signinbut" type="submit" style="width:28%;">Reset</button>
</form>
请参阅jsFiddle。
由于HTTP POST参数是小写的(如序列化表单元素的name
属性),因此$_POST
数组键在PHP中应为小写。
<?php
if (isset($_POST['username']) && isset($_POST['password'])&& isset($_POST['code'])) {
// ... do something
header('Content-Type: application/json; charset=utf-8');
echo $someJsonOutput;
}
答案 1 :(得分:0)
您需要阻止默认提交操作
在纯JavaScript中
form.addEventListener('submit',resetpassword,false)
function resetPassword(event){
event.preventDefault();
//your code here
}
这可以在按钮上工作,但也可以按下回车按钮。
在jquery中有点像这样..
$('form').submit(function(e){resetPassword(e);return false})
resetPassword(e){
e.preventDefault();
// your code
}
修改强>
单击提交按钮时的表格或按下输入按钮
将触发事件&#39;提交&#39;
所以如果从按钮
中删除函数调用者并将其添加到表单
您可以按Enter或点击提交
在这两种情况下都会执行你的功能
你的职能
纯javascript中的第一个参数和jquery中的第一个参数是事件
您需要停止该默认事件
你可以用自己的功能
来做到这一点event.preventDefault();
这样:
$('form').onsubmit(function(e){
e.preventDefault();
var user = document.getElementById('username').value;
var password = document.getElementById('password').value;
var conf = document.getElementById('confirm').value;
var code = document.getElementById('code').value;
if(code.length == 0 || password.length == 0 || user.length == 0 || conf.length == 0) {
alert("Entries empty");
} else if(password != conf) {
alert("Passwords don't match");
} else {
$.ajax({
type: "POST",
url: "scripts/changepassword.php",
data: {Username: user, Password: password, Code: code},
dataType: "jso..................
和你的HTML
<form>
<input id="username" placeholder="Username" name="username" type="text" />
<input id="password" placeholder="Password" name="password" type="password" />
<input id="confirm" placeholder="Confirm Password" name="confirm" type="password" />
<input id="code" placeholder="Code" name="code" type="text" />
<div class="registrationFormAlert" id="incorrectEntry"></div>
<p> </p>
<input class="btn" id="signinbut" value="Reset" type="submit" style="width:28%;" />
</form>
现在说看看纯javascript(可能与所有浏览器不兼容) http://caniuse.com/xhr2
document.getElementsByTagName('form')[0].addEventListener('submit',function(e){
e.preventDefault();
// validate form here else return or alert something
var xhr = new XMLHttpRequest;
xhr.open( 'POST' , YOURURL );
xhr.onload = function (){ alert('success') };
xhr.send( new FormData( this ) )
} , false );
答案 2 :(得分:0)
更改您的代码:
<script>
function resetPassword() {
var user = document.getElementById('username').value;
var password = document.getElementById('password').value;
var conf = document.getElementById('confirm').value;
var code = document.getElementById('code').value;
if(code.length == 0 || password.length == 0 || user.length == 0 || conf.length == 0) {
alert("Entries empty");
} else if(password != conf) {
alert("Passwords don't match");
} else {
$.ajax({
type: "POST",
url: "scripts/changepassword.php",
data: {Username: user, Password: password, Code: code},
dataType: "json",
success: function(data) {
alert("success");
}
});
}
}
</script>
<form>
<input id="username" placeholder="Username" name="username" type="text" />
<input id="password" placeholder="Password" name="password" type="password" />
<input id="confirm" placeholder="Confirm Password" name="confirm" type="password" />
<input id="code" placeholder="Code" name="code" type="text" />
<div class="registrationFormAlert" id="incorrectEntry"></div>
<p> </p>
<input class="btn" id="signinbut" onclick="resetPassword();return false;" value="Reset" type="submit" style="width:28%;" />
</form></div>
我只换了两个地方。第一个错误:在使用onclick事件时,使用return false来避免将表单提交到下一页(如果您使用的是ajax)。此外,您的代码格式不正确。我改变了它们。它现在应该工作
答案 3 :(得分:0)
在使用Ajax之前,我们应该检查以下内容:
<input type="submit"
onclick="functioncall()">
时要小心,因为点击此处提交表单
按钮最终会将我们重定向到表单中指定的操作页面。http://localhost:8080/procity/changepassword.php?username=asdf&password=a&confirm=a&code=bba7886bec2591db69c58dd315144114
我个人推荐使用此fiddle
中建议的方法来使用Ajax-PHP小提琴是由另一个用户创建的,这个方法可以用于Ajax-PHP