这是我之前问过的同一个问题。 抱歉,我检查了所有链接,前提是它没有帮助。 对不起,这是我第一次在这里问问题,所以不太清楚如何问
我在这里再次详细解释:
我有一个输入文本字段。我使用 jquery 来验证用户在此输入框中输入的输入日期。
我在javascript GET方法中将数据输入作为参数传递,并将其传递给PHP,并在那里使用简单的REG Ex进行验证。它确实在所有帐户中进行验证。但是,如果我在任何测试用例中添加#,则此验证将失败。 我的代码: 输入字段:
<div id="clntFstName" >
<label for="clnt_fst_name">First Name</label>
<input type="text" id="clnt_fst_name" name="clnt_fst_name" onBlur="checkFieldValid(this.value, this);" value=""/>
<div class="msgError"></div>
</div>
如果函数 CheckFieldValid 在用户离开字段输入框时调用。
Java脚本:
function checkFieldValid(value, obj) {
var elem = obj.name;
$('#' + elem).parent().children('.msgError').html('');
var $label = $("label[for='" + obj.id + "']").text();
var $id = obj.id;
$.getJSON("ajax/registerClient.php?action=checkInputFieldValid&varField=" + value + "&lab=" + $label + "&id=" + $id, function(json) {
if (json.status.length > 0) {
$.each(json.status, function() {
if (this['fail'] == 'fail') {
var info = '<div class="warningMsg"> ' + this['message'] + '</div>';
$('#' + elem).parent().children('.msgError').html(info);
$('#' + elem).focus();
$('#' + elem).val("");
}
if (this['success'] == 'success') {
$('#' + elem).parent().children('.msgError').html('this is success');
}
});
if (json.status == 'empty') {
$('#' + elem).parent().children('.msgError').html('this is empty');
}
}
});
}
PHP代码:
if($_GET['action'] == 'checkInputFieldValid'){
if(!empty($_GET['varField'])){
// this creates dynamic session variables and add values to it.
$_SESSION[$_GET['id']] = $_GET['varField'];
if(preg_match('/^[a-zA-Z]+$/',$_GET['varField'])){
$txtVar = 'It is a valid '.$_GET['lab'];
array_push($validFieldArray, array('success' => 'success', 'message' => $txtVar));
echo json_encode(array('status' => $validFieldArray));
$errorJScript = 0;
}else{
$txtVar = 'Enter a valid '.$_GET['lab'];
array_push($validFieldArray, array('fail' => 'fail', 'message' => $txtVar));
unset($_SESSION[$_GET['id']]);// unset the session variable to clear when page refresh
echo json_encode(array('status' => $validFieldArray));
$errorJScript = 1;
}
}
}
我不知道我错在哪里?我按照其他成员的指示做了所有事情 可能是我在传递 GET 请求变量时对 Java 脚本做错了什么?至于我想我完全按照其他成员告诉我的关于 PHP 部分的事情做了,但是当我从 Java 脚本部分获取数据时,数据可能是错误的?当我用 PHP 返回的其他值检查它时。但是当我在我的输入框中输入 # 时,它不会进行 AJAX 调用,也不会返回 JSON 或设置会话变量。所以可能当我将变量作为 GET 参数传递时,它不会运行 AJAX,只是不验证,所以请告诉我如何将 # 作为 GET 参数传递,以便我正确验证 PHP 中的字段。请帮忙,我会把我的工作丢掉:(
您的$.getJSON
调用应使用encodeURIComponent()
来确保您没有创建错误的URL:
$.getJSON("ajax/registerClient.php?action=checkInputFieldValid&varField=" +
encodeURIComponent(value) +
"&lab=" +
encodeURIComponent($label) +
"&id=" +
encodeURIComponent($id), function(json) {
如果不这样做,则#
字符将被解释为 URL 哈希字段开始的信号,而 URL 的其余部分将被忽略。