2013-03-06 110 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