2016-08-10 155 views
1

我想添加一個自定義驗證器,從服務器獲取一些信息。我知道remote驗證方法,我不想使用它,因爲我試圖在自己的驗證器中封裝這個邏輯......因爲我需要在幾個地方重複它,並且想讓remote免費用於其他事情。

雖然我的async性質很艱難。在$.ajax上關閉async已被棄用,現在在jQuery 3.0,我似乎無法找出任何其他方式讓它在返回結果之前暫緩,直到請求完成。

(function() { 
    $.validator.addMethod("customRemote", function (value, element, param) { 
     $.ajax({ 
      url: `/api/url`, 
      dataType: 'json', 
      type: 'POST', 
      data: {id: param, value: value} 
     }).done(function (response) { 
      console.log('always executes later ...'); 
      return response; 
     }); 
     console.log('always executes first ...'); 
    }, "Error message ..."); 
})(); 

我的服務器上的方法受到攻擊並完成所有應有的操作,並返回正確的結果。但驗證者在此之前得到迴應。我似乎無法得到它的工作。

我應該補充一點,我發送XHR並將credentials選項設置爲true,因爲只有經過身份驗證的用戶才能訪問服務器。

+0

如果驗證器需要同步,則無法使用*非常*糟糕的做法或修改驗證器無法解決此問題。 –

+0

這可能是你感興趣的。 https://jqueryvalidation.org/remote-method/ –

+0

您可以使用遠程方法代碼(https://github.com/jzaefferer/jquery-validation/blob/master/src/core.js)作爲基礎,並實現你的customRemote。 –

回答

0

您可以使用remote method source code 作爲基礎,並實現您的customRemote。

注意返回「掛起」,這是用於異步驗證內部控制的一些關鍵字。

remote: function(value, element, param, method) { 
    ...//other code 
return "pending"; 
}