2013-09-22 91 views
3

在新用戶註冊表單上,我有一個真正簡單的函數只是爲了檢查數據庫中是否存在用戶名。不幸的是,該聲明的else部分不起作用。 PHP文件正常工作,並按預期返回truefalse。下面是jQuery的:jquery if/else語句與.get不工作

$('#username').keyup(function() { 
     var inp = $('#username').val(); 
     $.get('register-check-username.php', { username: inp }, function(data) { 
      if(data!="false") { 
       $('#namecheck').html('✓'); 
      } else { 
       $('#namecheck').html('This username is already taken'); 
      } 
     }); 
    }); 

如果現在還不清楚,username是文本輸入的ID。當它改變時,php正在檢查用戶名可用性。然後,一個ID爲「namecheck」的<span>標籤將更改爲告訴用戶情況如何。現在,我可以將if(data)更改爲if(!data),並且其行爲將與該更改預期一致。如上所述,當它應該時,我可以得到$('#namecheck').html('✓'),但從來沒有$('#namecheck').html('This username is already taken')的第二部分。

爲什麼我的else行永遠不會被調用?我浪費了太多時間試圖自己解決這個問題,所以現在我要求大家幫忙弄清楚發生了什麼問題。

編輯: 隨着console.log(data)在那裏,控制檯返回false時,它是假的,但沒有記錄時,它是真的。

更新if(data)if(data!="false")。問題依然存在。

UPDATE 問題不是我想的那樣。它看起來像腳本發射,因爲它應該,除了它只有.keyup如果輸入值是4個字符或更少,並且我一直在測試它的用戶名是6個字母。返回的前4個字符的數據保持不變。

所以現在看起來問題實際上是它不會運行.get(),除非值是4個字符或更少。我正在尋找什麼可能導致這在PHP中。

+2

'console.log(data)'顯示什麼? – BlitZ

+0

當它是假的時它顯示'假',當它是真的時顯示沒有。我把它放在'var inp'行下面 – Yhilan

+0

你可以改變你的php以迴應'true'作爲其他的'false'已經工作嗎? – Sergio

回答

4

(數據)將永遠是一個truthy值,因爲它是一個字符串

更改爲

if (data=="true") ... 

如果爲true返回空(不是一個聰明的想法)儘量

if (data!="false") ... 

Live Demo

+0

我已經嘗試了這兩個,我遇到了同樣的問題。它只會改變(或者記錄到控制檯),如果它是錯誤的,那麼它永遠不會是真的。 'else'語句仍然被忽略。 – Yhilan

+0

然後你的電話是不正確的。你可以顯示'register-check-username.php?username + existinguser'返回什麼? – mplungjan

+0

如果我去註冊,檢查用戶名.php?用戶名=現有用戶它的回聲'真正的' – Yhilan

1

有些時候發生了什麼,你會在布爾型或簡單st中返回true/false環形格式,Javascript不會理解這一點。

因爲你應該使這樣的條件。

if(data === true || data === "true" || data === 1 || data === "1") 
{ 
// Do something here 
} 
else 
{ 
// Do something else 
}