0

在客户端验证我的字段并尝试为字段旁边的每个字段显示警告不是问题:

<div class="formblock">
    <label class="screen-reader-text">Email</label>
    <input type="text" name="email" {if $smarty.session.email} value={$smarty.session.email} disabled {/if} id="email" class="txt requiredField email" placeholder="Email:"/>
</div>

<div class="formblock">
    <label class="screen-reader-text">Message</label>
    <textarea name="comments" id="commentsText" class="txtarea requiredField"       placeholder="Message:"></textarea>
</div>

例如,要检查它们是否为空,我只需使用 .each 并检查每个字段并在其span旁边附加一个。

$('.requiredField').each(function () {
    if ($.trim($(this).val()) == '') {
        var labelText = $(this).prev('label').text();
        $(this).parent().append('<span class="error">You forgot to enter a ' + labelText + '.</span>');
        $(this).addClass('inputError');
        hasError = true;

    }
});

但是在服务器端,我通常做的事情是对每个字段执行验证,然后将错误消息附加为 var ($ERRORTEXT在这种情况下),然后在最后执行回显,并在 ajax 成功后显示在顶部形式。

$ERRORTEXT .= " <li> Name has to contain more than two characters </li> ";

if ($error)
{
echo $ERRORTEXT; 
}

如何按字段执行此操作(类似于我在客户端执行的操作)并将其返回到它们旁边的跨度?我假设不是用 echo 返回一个 var,我可能不得不返回一个 json 结果然后处理这个?

4

1 回答 1

1

你的文件.php

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

$validationData = json_decode($_POST['validationData'], true);

//do validation stuff here
//$validationData is an associative array containing all your validation data
//sent from the client's AJAX call

$data = array('error' => 'my errormessage');
//serializing some dummy data to the client
echo json_encode($data);

如何将表单数据转换为 JSON:使用 jQuery 将表单数据转换为 JavaScript 对象

其他文件.htm

$.ajax({
    url: 'yourfile.php',
    data: { validationData: JSON.stringify(yourFormDataObject) },
    success: function(data){
        console.log(data.error); //'my errormessage'
    }
});

从服务器接收的已解析对象data可能包含一个与元素匹配的 id 属性,以及您在它旁边显示的消息。

于 2013-08-08T13:35:08.130 回答