Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';似乎没有让原型AJAX表单验证与Codeigniter一起工作_Php_Ajax_Codeigniter_Prototypejs - Fatal编程技术网

Php Can';似乎没有让原型AJAX表单验证与Codeigniter一起工作

Php Can';似乎没有让原型AJAX表单验证与Codeigniter一起工作,php,ajax,codeigniter,prototypejs,Php,Ajax,Codeigniter,Prototypejs,有什么把戏吗?以下是我对其工作的设想: 用户尝试提交表单 Event.observe捕捉到这一点,并将AJAX请求发送到一个特殊的验证URL(使用Codeigniter的PHP) 如果未返回任何错误,请继续提交原始表单 如果发现错误,请取消表单提交并显示 大多数情况下,我似乎无法在表单继续提交时获得单独的AJAX验证请求。我可以使用Event.stop(Event),但如果验证调用中不存在验证错误,则找不到重新启动流程的方法。我会发布代码,但我有大约15个我尝试过的例子,这会把这个问题弄得一团糟

有什么把戏吗?以下是我对其工作的设想:

  • 用户尝试提交表单

  • Event.observe捕捉到这一点,并将AJAX请求发送到一个特殊的验证URL(使用Codeigniter的PHP)

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

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

  • 大多数情况下,我似乎无法在表单继续提交时获得单独的AJAX验证请求。我可以使用
    Event.stop(Event)
    ,但如果验证调用中不存在验证错误,则找不到重新启动流程的方法。我会发布代码,但我有大约15个我尝试过的例子,这会把这个问题弄得一团糟


    有什么想法吗?我不认为表单验证会如此困难。

    我对您的流程描述有点困惑。用户提交表单。javascript捕获onlcick,然后向服务器发送和ajax请求。i、 e.已发送HTTP请求对象。现在服务器执行一些处理(使用Codeignitor进行验证)。您说如果没有返回错误,这是指客户端还是验证没有返回错误?如果没有发生验证错误,则不应返回到客户端。此时,您只需继续进行服务器端处理。因此,无需“重新提交”表格进行提交。服务器在POST阵列中已经拥有它所需的一切


    如果有错误,那么是的,您将返回一个HTTP响应对象,其中包含某种类型的HTML或JSON等,然后javascript可以解析并显示给用户。然后,他们需要重新点击提交按钮,重新开始整个过程。

    最终解决了这个问题!这是我最后的JS代码。虽然表单本身提交到“/search/result/keyword”作为默认操作,但验证是一个完全不同的“/search/validate/searchkeyword”URL

    
    事件。观察(窗口“加载”,函数()
    {
    观察('searchkeyword','submit',函数(事件)
    {
    事件。停止(事件);
    新的Ajax.Request(“/search/validate/searchkeyword”,
    {
    方法:“post”,
    参数:$('searchkeyword')。序列化(true),
    onSuccess:函数(t)
    {
    var response=t.responseText | |“错误|发生错误。”;
    var responsearray=response.split(“|”);
    if(responsearray[0]=='ERROR'){document.getElementById('searchkeywordvalidate')。innerHTML=responsearray[1];}
    else{$('searchkeyword').submit();}
    },
    onFailure:function(){document.getElementById('searchkeywordvalidate')。innerHTML='发生错误。;}
    });
    });
    });
    
    所谓无错误,是指验证通过,表单可以正常继续提交。在验证时,我在继续进行服务器处理时遇到的问题是,我有一个DIV在客户端填充了reply。因此,任何持续的服务器处理也会显示在DIV中。
    <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>