2013-03-14 86 views
6

我想通過自定義函數驗證jQuery驗證引擎的子域的可用性。驗證似乎正確發生,但如果.ajax請求返回200,則不會顯示alertText。我添加了Access-Control-Allow-Origin標頭,並且可以在我的日誌中看到成功完成的請求。jQuery驗證引擎自定義javascript驗證

我在做什麼錯?

JavaScript函數:

function validateDomain(field, rules, i, options) { 
    var url = "https://" + field.val() + ".example.com/"; 
    $.ajax(url, 
     { 
      statusCode: { 
       200: function() { 
        //alert('name exists already'); 
        return options.allrules.validate2fields.alertText; 
       } 
      } 
     }); 
} 

表格字段:

<label class="required" for="signup[subdomain]">Subdomain<span>*</span></label> 
    <span>https://</span> 
    <input id="signup[subdomain]" name="signup[subdomain]" class="field field validate[required,funcCall[validateDomain]]" type="text"> 
    <span>.example.com</span> 
+0

你可以添加一個錯誤處理程序,看看它是否得到執行,我懷疑是發生了一個解析錯誤 – 2013-03-14 13:32:54

+2

看起來像一個副本[如何從一個函數返回一個AJAX調用的響應?](http:/ /stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call-from-a-function) – Bergi 2013-03-14 14:36:00

+1

你已經爲[tag:jquery-validate]和[tag :jquery-validation-engine],但這些是兩個完全不同的插件。你真的在使用哪一個? – Sparky 2013-03-14 15:06:06

回答

0

的問題是,$.ajax是一個異步函數,並且不以這種方式工作。

function validateDomain(field, rules, i, options) { 
    var url = "https://" + field.val() + ".example.com/"; 
    $.ajax(url, 
     { 
      statusCode: { 
       200: function() { // [ second function ] 
        return options.allrules.validate2fields.alertText; 
       } 
      } 
     }); 
} 

的問題是:你的回報是隻爲[second function]不是validateDomain

看着jquery-validation-engine的文檔,我看不到一種做你想做的事情的方式。