Я использую плагин jQuery Form http://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.
Случай I> Если я отправляю форму, не вводя ничего для #fname, возвращаемый результат будет следующим:
"is_fname_empty":true,"is_fname_isset":false
Случай II> Если я отправляю форму с вводом 0 для #fname, возвращаемый результат будет следующим:
"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
Как видите, нет никакой разницы между двумя представлениями, если мы рассмотрим только пустой, isset и метод, предоставленный dconde.Однако, что отличается от моих последних экспериментов, так это то, что длина строки может помочь мне изменить ситуацию.Я не знаю, почему это не работает для меня в прошлый раз.
Спасибо вам всем.