似乎无法将Prototype AJAX表单验证与Codeigniter结合使用

时间:2010-06-16 12:25:49

标签: php ajax codeigniter prototypejs

是否涉及某种技巧?以下是我设想的工作方式:

  1. 用户尝试提交表单

  2. Event.observe捕获此信息并将AJAX请求发送到特殊验证URL(使用Codeigniter的PHP)

  3. 如果未返回任何错误,请继续提交原始表单

  4. 如果发现错误,请取消表单提交并显示

  5. 大多数情况下,当表单继续提交时,我似乎无法获得单独的AJAX验证请求。我可以使用Event.stop(event),但如果验证调用中不存在验证错误,则无法重新启动该过程。我发布了代码,但我有大约15个我尝试过的例子,它会使这个问题变得混乱。

    有什么想法吗?我认为表格验证不会那么困难。

2 个答案:

答案 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可以解析并显示给用户。然后他们需要重新点击提交按钮,重新开始这个过程。