是否涉及某种技巧?以下是我设想的工作方式:
用户尝试提交表单
Event.observe捕获此信息并将AJAX请求发送到特殊验证URL(使用Codeigniter的PHP)
如果未返回任何错误,请继续提交原始表单
如果发现错误,请取消表单提交并显示
大多数情况下,当表单继续提交时,我似乎无法获得单独的AJAX验证请求。我可以使用Event.stop(event)
,但如果验证调用中不存在验证错误,则无法重新启动该过程。我发布了代码,但我有大约15个我尝试过的例子,它会使这个问题变得混乱。
有什么想法吗?我认为表格验证不会那么困难。
答案 0 :(得分:1)
终于搞清楚了!这是我的最终JS代码。虽然表单本身提交“/ search / result / keyword”作为默认操作,但验证是完全不同的“/ search / validate / searchkeyword”URL。
<script type="text/javascript">
Event.observe(window, 'load', function()
{
Event.observe('searchkeyword', 'submit', function(event)
{
Event.stop(event);
new Ajax.Request('/search/validate/searchkeyword',
{
method: 'post',
parameters: $('searchkeyword').serialize(true),
onSuccess: function(t)
{
var response = t.responseText || "ERROR|An error has occurred.";
var responsearray = response.split('|');
if( responsearray[0] == 'ERROR' ) { document.getElementById('searchkeywordvalidate').innerHTML = responsearray[1]; }
else { $('searchkeyword').submit(); }
},
onFailure: function() { document.getElementById('searchkeywordvalidate').innerHTML = 'An error has occurred.'; }
});
});
});
</script>
答案 1 :(得分:0)
我对你的过程描述感到困惑。用户提交表单。你的javascript捕获onlcick,然后发送和ajax请求到服务器。即已发送HTTP请求对象。现在服务器进行一些处理(使用Codeignitor进行验证)。您说如果没有返回错误,这对客户端意味着还是从验证中没有返回错误?如果未发生验证错误,则不应返回客户端。此时您只需继续进行服务器端处理。所以没有必要“重新提交”提交表单。服务器已经拥有了POST数组中所需的一切。
如果有错误,那么您将返回一个HTTP响应对象,其中包含某种类型的HTML或JSON等,然后javascript可以解析并显示给用户。然后他们需要重新点击提交按钮,重新开始这个过程。