我使用remote
方法jQuery Validation來檢查系統中是否已存在用戶名。如果用戶存在,則腳本does_user_exist.php
返回1
。來自jQuery的錯誤響應驗證遠程無法正常工作
$registration.find(".username").each(function() {
var $this = $(this);
$this.rules('add', {
remote: {
url: "does_user_exist.php",
type: "post",
dataType: "json",
data: {uname: function(){ return $this.val(); } },
async: false,
success: function (data) { //returns 1 if user exists
if (data) {
console.log("false!");
return "Sorry, that user already exists." //doesn't work
//return false; //doesn't work
//return data; //doesn't work
//return {"string"}; //doesn't work
//return {0: "string"};//doesn't work
} else {
console.log("true!");
return true;
}
}
},
messages: {
remote: jQuery.format("{0}") //doesn't work
// remote: "Simple string doesn't work here either"
}
});
});
我的問題是,從不顯示錯誤消息。我可以從我的console.log
輸出中看到,當用戶存在時它正確記錄了false!
,但錯誤消息從不出現。
正如你可以從註釋行中看到的,我一直試圖通過猜測和檢查來弄清楚我到底做了什麼錯誤,假設我以某種方式返回了錯誤字符串錯誤的格式,但我沒有成功。
編輯3: 我能夠得到後端響應被改變。 PHP現在發送的JSON編碼爲true
/false
,無濟於事。我們試圖發送通過以下方式後端迴應,但該插件似乎並沒有被不管接住我們做什麼:
json_encode(false)
json_encode('["false"]')
json_encode("false")
json_encode(["false"])
"false"
false
NULL
""
0
至於我可以根據記錄,其中之一就告訴應該有工作:
的響應被評估爲JSON,並且必須是有效的元素, 真實,可以是任何虛假,未定義或爲空無效元素,使用 默認的消息;
注意,這個問題的答案可能與this issue有關。
下面是修改後的代碼:
$registration.find(".username").each(function() {
var $this = $(this);
remote: {
url: "does_user_exist.php",
type: "post",
data: {entityExistence: function(){return $this.val();} },
success: function(data){ console.log(data); }
},
messages: {
remote: "Sorry, that username is not available."
}
});
PHP腳本總是返回true
或false
正確。根據文檔,除了true
之外的任何內容都會觸發錯誤消息。但是錯誤信息沒有出現。我知道錯誤消息正在工作,因爲還有其他檢查正在正常工作(例如rangelength
,爲了清晰起見從此粘貼代碼中刪除)。
您沒有閱讀遠程方法的文檔?它清楚地解釋了你的服務器代碼必須返回的內容。 – Sparky
@Sparky:順便說一下,是的,我確實閱讀了它的文檔,特別是[這部分](http://jqueryvalidation.org/remote-method/):_響應評估爲JSON,對於有效元素必須爲真,並且對於無效元素,可以使用默認消息爲false,undefined或null;或一個字符串,例如。 「該名稱已被佔用,請嘗試使用peter123」來顯示錯誤消息._ – brentonstrine
同時引用:_「對於有效元素必須爲」true「_〜當用戶不存在時返回」true「?你的'1'被解釋爲一個字符串還是'true'?我們已經知道'1'不是_「false,undefined或null」_ – Sparky