1

我有一个带有密码字段的表单

<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 给successajax 调用中的函数。但它总是返回0,插入正确密码时也是如此。我哪里错了?

var_dump($_POST);

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

1 回答 1

4

您在 javascript ajax 回调处理程序中检查 a 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

还要将returnPHP 中的语句更改为echo语句。请注意,该return语句实际上不输出任何内容:

if( md5($pw) == md5($_POST['password']) ){
    $_SESSION['key'] = 1;
    echo '1';
} else {
    echo '0';
}
于 2013-04-30T17:10:56.837 回答