2013-03-06 251 views
0

這是我的代碼,在這裏我傳遞輸入的用戶名和密碼值。我寫了函數,輸入將用json文件檢查。如果給定的輸入存在「登錄正確」,則將顯示警報,否則將顯示「登錄錯誤」。從Json文件讀取JQuery

但在這裏對我來說總是顯示「登錄不正確」。我知道這個功能有什麼問題。我已經嘗試在函數中使用數組變量來保存json文件數據。那麼它工作正常。我在檢查json文件時遇到了麻煩。

幫我解決了這個問題。我的輸入應該使用json文件檢查它是否存在。

<!DOCTYPE html> 
<html> 
<head> 
<script src="jquery.js"> 
</script> 
<script> 
$(document).ready(function() 
{ 
    var a="user2"; 
    var b="password2"; 
    var checkval = false; 

    $.getJSON('login.json', function(data) 
    { 
     $.each(data,function(i,obj) 
     { 
      if(obj.username == a && obj.password == b) 
      { 
       checkval = true; 
       return false; 
      } 
     }); 
    }); 
    if(checkval == true) 
     { 
      alert("login correct"); 
     } 
    else 
     { 
      alert("!!!!!-----Incorrect login Details-----!!!!!"); 
     } 

}); 
</script> 
</head> 
<body> 
</body> 
</html> 

,這是我login.json文件

[ 
    { 
      "username": "user1", 
      "password": "password1" 
    }, 
    { 
     "username":"user2", 
     "password" : "password2" 
    } 
] 
+3

用JavaScript檢查密碼是這樣的__REALLY__壞主意。任何具有適中Javascript技能的人都可以入侵你的系統。你應該在服務器端進行登錄,而不是使用Javascript。 – 2013-03-06 05:37:27

+0

與答案無關。爲什麼'if(checkval == true)'只使用'if(checkval)' – asifsid88 2013-03-06 05:37:45

+1

put alert(obj.username);並檢查你是否有價值 – nav0611 2013-03-06 05:37:48

回答

1

AJAX異步是之前密碼和用戶名被執行匹配你的代碼

if(checkval == true) 
     { 
      alert("login correct"); 
     } 
    else 
     { 
      alert("!!!!!-----Incorrect login Details-----!!!!!"); 
     } 

,嘗試

$.getJSON('login.json', function(data) 
    { 
     $.each(data,function(i,obj) 
     { 
      if(obj.username == a && obj.password == b) 
      { 
       checkval = true; 
       return false; 
      } 
     }); 
     if(checkval == true) 
     { 
      alert("login correct"); 
     } 
    else 
     { 
      alert("!!!!!-----Incorrect login Details-----!!!!!"); 
     } 

    }); 

這裏是一個小專業版的概念,當AJAX不使用它的工作原理http://jsfiddle.net/aKVC2/

,這裏是工作DEMO

附:

由一些答案設置async:false建議是一個選項(從來沒有利用它!),但由於jQuery的1.8版本its DEPRECATED

+1

只是打敗了我。 – 2013-03-06 05:39:07

+0

這解決了我的問題。謝謝。 – MAHI 2013-03-06 05:54:02

1

$ .getJSON是異步..這意味着它使調用,而其餘的代碼運行。在進行調用之前以及在可以檢查返回的值之前,它正在獲取if(checkval == true)。

如果你想「修復」這個,看看這個問題。

Is it possible to set async:false to $.getJSON call

+0

但他已經在回調方法中寫入了用戶名和密碼的驗證。加載文件後將執行。糾正我,如果我錯了 – asifsid88 2013-03-06 05:40:53

+0

@ asifsid88驗證是在回調中,但他正在執行的回調函數內更新的變量是否在外面... – dakait 2013-03-06 05:43:31

+0

但回調方法不會被調用,直到請求已發送並收到響應。與此同時,由於它是異步的,在回調有機會被調用之前,代碼移動到if語句。 – 2013-03-06 05:44:12

1

把第二,如果裏面:

$.getJSON('login.json', function(data) { 
    $.each(data,function(i,obj){ 
     if(obj.username == a && obj.password == b){ 
      checkval = true; 
      return false; 
     } 
    }); 
    if(checkval == true){ 
     alert("login correct"); 
    }else{ 
     alert("!!!!!-----Incorrect login Details-----!!!!!"); 
    } 
}); 
1

AJAX是異步的,你的功能撥打電話之前,它可以檢查對返回的值

下面添加行只是$以上。 getJson

$.ajaxSetup({async:false}); 
+1

自jquery 1.8棄用它http://stackoverflow.com/questions/11448011/jquery-ajax-async-deprecated-what-now – dakait 2013-03-06 05:48:09