我正在使用 jQuery Form Pluginhttp://jquery.malsup.com/form/
提交我的表单。
这是用于提交表单的代码。
var options = {
beforeSubmit: showRequest, // pre-submit callback
success: showResponse, // post-submit callback
url: 'recaptcha.php', // override for form's 'action' attribute
type: 'POST'
};
$('#myform').submit(function() {
$(this).ajaxSubmit(options);
return false;
});
这是我用于测试的表格。
<form action="" method="post" style="margin:10px 0;" id="myform">
<div id="recaptcha_image"></div>
<input type="text" name="recaptcha_response_field" id="recaptcha_response_field" size="30" />
<input type='file' name='filename' size='10' />
First name: <input type="text" id="fname" name="fname" />
<input type="submit" value="Submit" id="submit_button" />
</form>
这是 recaptcha.php 中的代码片段
$results['success'] = true;
$results['msg'] = 'Security code is valid!';
$results['is_fname_empty'] = empty($fname);
$results['is_fname_isset'] = isset($fname);
echo json_encode( $results );
return;
这是我在 jQuery Form Plugin 中发现的问题。
案例一> 如果我提交表单时没有为#fname 输入任何内容,则返回结果如下:
"is_fname_empty":true,"is_fname_isset":false
案例二> 如果我在#fname输入0的情况下提交表单,返回结果如下:
"is_fname_empty":true,"is_fname_isset":false
如您所见,我似乎无法区分用户输入的内容。我真的需要知道用户是否没有输入任何内容或用户输入 0。
任何人都可以帮忙吗?
谢谢
// Update based on comments from dconde //
大家好,
我设置了一个工作脚本,以便我可以轻松地解释我的问题。
<html> // testAjaxForm.php
<head>
<script type="text/javascript" src="js/jquery/jquery-1.4.2.js"></script>
<script type="text/javascript" src="js/jquery/jquery.form.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#myForm').submit(function() {
$(this).ajaxSubmit(); // called first
return false;
});
});
</script>
</head>
<body>
<form id="myForm" action="verify.php" method="post">
Name: <input type="text" name="fname" />
<input type="submit" value="Submit Comment" />
</form>
</body>
</html>
<?php // verify.php
require_once('./FirePHPCore/FirePHP.class.php');
require_once('./FirePHPCore/fb.php');
FB::setEnabled(true);
ob_start(); // avoid 'headers already sent error'
FB::log($_POST, '$_POST');
FB::log(strlen($_POST['fname']), 'strlen(name)');
FB::log(empty($_POST['fname']), 'empty(fname)');
FB::log(isset($_POST['fname']), 'isset(fname)');
$is_fname_empty = empty($_POST['fname']) && $_POST['fname'] != 0 && $_POST['fname'] != '0';
FB::log($is_fname_empty, '$is_fname_empty');
?>
Here is the printed information from FirePHP.
1> 我提交表格时没有输入任何信息。
$_POST: array('fname'=>'')
strlen(name): 0
empty(fname): TRUE
isset(fname): TRUE
$is_fname_empty: FALSE
2> 我用 0 提交表单。
$_POST: array('fname'=>'0')
strlen(name): 1
empty(fname): TRUE
isset(fname): TRUE
$is_fname_empty: FALSE
可以看到,如果只考虑empty、isset和dconde提供的方法,两次提交没有区别。然而,与我上次实验不同的是,字符串长度可以帮助我有所作为。我不知道为什么上次它对我不起作用。
谢谢你们。