2013-04-30 88 views
1

我有一个形式密码字段PHP函数总是返回零

<form id="form-login" class="row-fluid" novalidate="novalidate" method="post" action="#"> 
<input class="span12" type="password" name="password" pattern="[0-9 ]{5,15}" /> 
</form> 

时提交我做一个Ajax调用形式:

... 
var data = $('form').serialize(); 

$.ajax({ 

    url: "/wp-admin/admin-ajax.php", // wordpress 
    type: "POST", 
    data: data + '&action=login_check', 
    cache: false, 

    success: function (html) {   
     $('.loading').hide(); 

     if (html == 0) { 
      $('.undone').fadeIn('slow'); 
     } else if (html == 1) { 
      $('.done').fadeIn('slow');     
     } 
    } 
}); 

return false; 
... 

functions.php使用此功能检查密码( WordPress的):

function login_check(){ 

     $pw = 'hello'; 

     if(md5($pw) == md5($_POST['password'])){ 

      $_SESSION['key'] = 1; 
      return 1; 

     } else { 

      return 0; 

     } 

    die(); 

} 

add_action('wp_ajax_login_check', 'login_check'); 
add_action('wp_ajax_nopriv_login_check', 'login_check'); 

我希望上述函数返回0或1到success函数在ajax调用中。但是,当插入正确的密码时,它总是返回0。我在哪里错了?

var_dump($_POST); 

array(3) { 
    ["password"]=> 
    string(5) "hello" 
    ["s"]=> 
    string(0) "" 
    ["action"]=> 
    string(11) "login_check" 
} 
+0

你在'var_dump($ _ POST)'中得到了什么? – 2013-04-30 17:00:30

+0

尝试在if子句中放置return语句。当前它仅适用于其他条款。然后检查 – 2013-04-30 17:06:31

回答

4

你在你的javascript ajax回调处理程序中检查Number。但html参数将会是一个String。将回拨更改为:

if (html == '0') { 
    $('.undone').fadeIn('slow'); 
} else if (html == '1') { 
    $('.done').fadeIn('slow');     
} 

会发生什么情况?您正式(在编辑问题之前)在成功时没有返回'',并且'0'有错误。但由于javascript的宽松输入系统评估为==0。检查这段JavaScript代码:

""==0; // true 
"0"==0; // true 

而且改变在PHP中return语句转换为echo语句。请注意0​​声明实际上什么都没输出:

if(md5($pw) == md5($_POST['password'])){ 
    $_SESSION['key'] = 1; 
    echo '1'; 
} else { 
    echo '0'; 
} 
+0

感谢您的有趣答案,但它无法正常工作... – 2013-04-30 17:17:27

+0

什么给你'alert('>>'+ html +'<<');'?内容之前或之后的任何空格? – hek2mgl 2013-04-30 17:19:30

+0

它总是给出同样的该死零:'>> 0 <<'(没有空白) – 2013-04-30 17:23:14