2013-07-22 35 views
0

我使這個代碼驗證了我的表單(ajax),但它不起作用,(不執行Checkpage函數)。我如何驗證我的表單(AJAX)?

$('#myform').submit(function(e){ 
    function Checkpage(catego){ 
     var desc=$('#descripcion').val(); 
     var title = $("#title").val(); 
     var parametros = {"descripcion":desc,"title":title}; 
     $.ajax({ 
      data: parametros, 
      url: 'Check.php', 
      type: 'post', 
      beforeSend: function() { 
       $("#Checkpage").html("..."); 
      }, 
      success: function (response) { 
       if(response!=" "){ 
        alert(response);                           
       } else { 
        alert('Process'); 
        $("#myform").submit(); 
       } 
      } 
     }); 
    } 
}) 

請幫我

+1

所以......你要提交一次值進行驗證,然後再提交他們是否有效?爲什麼不直接對提交進行驗證? –

+0

你確定它沒有執行該功能嗎?在'console.log('test');''var desc = $('#descripcion')。val();'之上拋出''。另外,請點擊Google Chrome中的F12,然後轉到網絡面板,查看您的AJAX請求發生了什麼。 – user1477388

+0

我想先進行驗證,然後提交。 @ElGuapo – Alvaro

回答

0

你所有的提交功能,目前還僅僅是聲明名爲Checkpage()功能不調用它。只需刪除Checkpage()函數聲明,並讓代碼的其餘部分直接在submit()函數中運行。

然後當然,你不需要調用submit()遞歸。您需要做的是返回true,如果驗證通過以允許提交執行其預期操作或返回false以防止表單提交。

但是爲了做到這一點,您需要在返回true/false響應之前實際等待ajax調用的結果,因爲此調用是異步的。一種方法是使用async: false使呼叫成爲阻塞同步呼叫。然後您可以設置一個標誌來指示POST是有效的並返回標誌的值。

那麼你最終與可能是這樣的:

$('#myform').submit(function(e){ 
    var validationSuccess = false; 
    var desc=$('#descripcion').val(); 
    var title = $("#title").val(); 
    var parametros = {"descripcion":desc,"title":title}; 
    $.ajax({ 
     data: parametros, 
     url: 'Check.php', 
     type: 'post', 
     async: false, 
     beforeSend: function() { 
      $("#Checkpage").html("..."); 
     }, 
     success: function (response) { 
      if(response == " ") { 
       // this is valid request 
       valdidationSuccess = true; 
      } 
     }  
    }); 
    return validationSuccess; 
}); 
+1

他(或她)是否需要同步調用這個ajax?從成功返回「真」或「假」只適用於「成功方法」在事件函數中聲明的方法變量將需要創建並設置在「成功」 –