我有一个带密码字段的表单
<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');
我希望上面的函数在ajax调用中向success
函数返回0或1。但是,当插入正确的密码时,它始终返回0
。我哪里错了?
var_dump($_POST);
array(3) {
["password"]=>
string(5) "hello"
["s"]=>
string(0) ""
["action"]=>
string(11) "login_check"
}
答案 0 :(得分:4)
您在javascript ajax回调处理程序中检查Number
。但是html
param将是一个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
语句。请注意,return
语句实际上不输出任何内容:
if( md5($pw) == md5($_POST['password']) ){
$_SESSION['key'] = 1;
echo '1';
} else {
echo '0';
}