2010-06-16 56 views
0

是否存在某種涉及的技巧?以下是我會想象它的工作:似乎無法獲得原型AJAX表單驗證與Codeigniter一起使用

  1. 用戶試圖提交(PHP使用笨)形式

  2. Event.observe抓住了這個,併發送一個AJAX請求到一個特殊的驗證URL

  3. 如果沒有錯誤返回,繼續提交原始表格

  4. 如果發現錯誤,取消表單提交併顯示

大多數情況下,我似乎無法獲得單獨的AJAX驗證請求,因爲表單將繼續提交。我可以使用Event.stop(event),但如果驗證調用中不存在驗證錯誤,則尚未找到重新啓動該過程的方法。我會發布代碼,但我有大約15個我嘗試過的事例,它只會混淆這個問題。

任何想法?我不認爲表單驗證會很困難。

回答

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> 
0

我對你的過程描述有點困惑。用戶提交表單。您的JavaScript捕獲onlcick,然後發送和ajax請求到服務器。即HTTP請求對象已被髮送。現在服務器進行一些處理(使用Codeignitor進行驗證)。你說如果沒有錯誤返回,這是否意味着客戶端或驗證返回錯誤?如果沒有發生驗證錯誤,您不應該返回客戶端。您現在繼續進行服務器端處理。所以沒有必要「重新提交」提交表單。服務器已經擁有了POST數組中所需的所有內容。

如果有錯誤,那麼你會返回一個HTTP響應對象與一些類型的HTML或JSON等,然後JavaScript可以解析並顯示回用戶。然後他們需要重新點擊提交按鈕,重新開始整個過程​​。

+0

通過沒有錯誤,我的意思是驗證通過和窗體可以繼續正常提交。我在驗證時繼續進行服務器處理時碰到的問題是,我在客戶端有一個填充了答覆的DIV。因此,任何繼續的服務器處理也會顯示在DIV中。我今晚會爲這個例子發佈一些代碼。 – MattB 2010-06-16 13:52:24

相關問題