以下代码片段返回“失败”警告框,即使表单填写正确,我想显示“已通过”警告框。 当然有一些错误,但我可以找到...
此处的完整代码:http://alessandrosantese.com/Forms/Custom_Validation/Form-Validation-Plugin-AJAX.html
submit.click(function(evt) {
evt.preventDefault();
validate_form();
$('form input:not(.submit, .email, .test)').each(function(){
if ($(this).val() == '') {
add_color($(this), red);
}
else {
add_color($(this), white);
}
});
var data = form.serialize();
// AJAX call
$.ajax({
url: 'process.php',
type: "post",
data: data,
success: function(r){
if (r.success) {
alert('passed');
} else {
alert('failed');
}
}
});
});
PHP代码(非常基本,现在只是为了让AJAX成功运行)
<?php
$name = $_POST['f_name'];
$l_name = $_POST['l_name'];
$email1 = $_POST['email'];
$email2 = $_POST['email_c'];
$tel = $_POST['tel'];
$postcode = $_POST['postcode'];
$url = $_POST['url'];
$checkbox = $_POST['checkbox'];
echo "\n$name\n$l_name\n$email1\n$email2\n$tel\n$postcode\n$url\n$checkbox";
?>
我需要找到一种方法来确保validate_form();在AJAX调用之前工作。
答案 0 :(得分:1)
validate_form会返回任何内容吗?如果是这样,您可以在任何地方捕获函数validate_form()
的返回值。
validate_form()
必须返回一个布尔值,以指示表单是否有效。在您的每个功能中 - validateEmail()
,checkPostCode()
,checkURL()
会根据这些字段是否有效返回布尔值。并将validate_form()
重写为
function validate_form()
{
return (validateEmail() && checkPostCode() && checkURL());
}
我想你想要这样的东西:
if(validate_form()) //if the form is valid
{
$.ajax({
url: 'process.php',
type: "post",
data: data,
success: function(r){
alert('passed')
},
error: function(r){
alert('failed: ' + r.statusText);
});
}
else
{
alert('failed');
}
答案 1 :(得分:0)
您没有返回JSON字符串,因此r
永远不会有.success
属性。你传回一个简单的字符串,所以也许你最好不要做
if (r <> '') {
alert('success');
} else {
alert('failed');
}
答案 2 :(得分:0)
最佳解决方案可能是存储要在数组中返回的信息;然后在回复它之前使用json_encode()。
将AJAX脚本的PHP部分更改为:
$return = array();
$return['name'] = $_POST['f_name'];
$return['l_name'] = $_POST['l_name'];
$return['email'] = $_POST['email'];
$return['email_c'] = $_POST['email_c'];
$return['tel'] = $_POST['tel'];
$return['postcode'] = $_POST['postcode'];
$return['url'] = $_POST['url'];
$return['checkbox'] = $_POST['checkbox'];
$return['success'] = true;
echo json_encode($return);
然后将以r.nameofparam形式向您发送的格式将信息发送回jquery ...因此您可以使用
访问成功的价值r.success
或带有
的网址的值r.url
答案 3 :(得分:0)
尝试使用完成&amp;失败:
// AJAX call
$.ajax({
url: 'process.php',
type: "post",
data: data
}).done(function() { alert("passed"); })
.fail(function() { alert("failed"); });