2013-04-30 92 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