使用PHP和jQuery Ajax构建基本的系统登录。
我想要做的是通过ajax提交表单的部分并返回一个数组。我不太确定我是否有这个权利。
这是PHP
if($access_function == 'access_login_1'){
$email = $_POST['access_email'];
$pwd = $_POST['access_pwd'];
if(!$email || !$pwd){
$error = 'Empty';
}
else {
$user = get_user($email);
if($user && $user['pwd'] == $pwd){
if($user['status'] == 1){
$action = 1;
}
else {
$order = 'Unauthorised';
}
}
else {
$error = 'invalid';
}
}
return array('action'=>$action,'error'=>$error,'order'=>$order);
}
get_user函数类似于::
function get_user($email){
global $cnx;
$q = $cnx->prepare("SELECT email FROM `users` WHERE email = :email");
$q->execute(array(':email' => $email));
return $q->fetch();
}
现在jQuery是真正的斗争。我想要的是将序列化的值提交给这个PHP。如果脚本返回1的操作,我想执行另一个脚本,我想要$ error进入一个名为error的div并命令进入一个名为$ order的div
这没效果:
function sendvars(container,linkrul,perform){
var vars = 'access=1';
$(container).find('input').each(function(){
vars += '&' + $(this).attr('name') + '=' + $(this).val();
});
$.ajax({type:'POST',url:linkrul,data:vars,success:function(results){
if(results == 1){ }
else { $(container).find('.orders').html(results).slideDown(300); }
}
});
}
- 哈希不仅仅是在我们测试所有东西的时候。
答案 0 :(得分:0)
您需要更仔细地考虑从PHP发送到AJAX回调的数据:
return array('action'=>$action,'error'=>$error,'order'=>$order);
不会产生Javascript可以读取的任何输出,除非您以某种方式将其序列化(将其转换为字符串并输出),例如XML或JSON(使用json_encode()
)。您可以通过直接在浏览器中查看脚本或使用Firebug等调试工具来测试脚本是否输出有用的内容。dataType
parameter)。如果是XML,它会将整个XML文档传递给您的回调函数,因此您需要使用.find
和.each
等函数来检查它。可能最简单的方法是让PHP使用header('Content-type: application/json');
(告诉jQuery你正在使用JSON)并使用json_encode
回显一些数据,这样你的Javascript回调就可以得到一个简单的Javascript对象。< / LI>
result == 1
)或HTML .html(results)
的blob。更好的方法是传回PHP代码中显示的整个结果结构(即echo json_encode(array('action'=>$action,'error'=>$error,'order'=>$order));
)。然后,您可以单独检查并处理结构的每个部分(例如response.action == 1
,.html(response.order)
),并且您的代码在以后的情况下变得更具可读性和灵活性。最后,jQuery有一些内置函数可以在这里为你做更多的工作:查看$.post
作为AJAX调用的简写,以及.serialize()
(或者cousin .serializeArray()
)用于读取表单元素的当前值,以便发送给AJAX回调。
(顺便说一下,我确定你已经发现了这一点,但我认为linkrul
应该是linkurl
)
答案 1 :(得分:0)
我会这样做,返回json编码的数组:
if($access_function == 'access_login_1'){
$email = $_POST['access_email'];
$pwd = $_POST['access_pwd'];
if(!$email || !$pwd){
$resp = array(
'action' => $someValue,
'order' => $someValue,
'error' => 'No Email or password provided'
);
}
else {
$user = get_user($email);
if($user && $user['pwd'] == $pwd){
if($user['status'] == 1){
$resp = array(
'action' => 1,
'order' => $someValue,
'error' => 'No Error'
);
}
else{
$resp = array(
'action' => $someValue,
'order' => 'Unauthorised',
'error' => 'Order Error'
);
}
}
else {
$resp = array(
'action' => $someValue,
'order' => 'Unauthorised',
'error' => 'Invalid'
);
}
}
echo json_encode($resp);
}
在js:
function sendvars(container,linkrul,perform){
var vars = 'access=1';
$(container).find('input').each(function(){
vars += '&' + $(this).attr('name') + '=' + $(this).val();
});
$.ajax({type:'POST',url:linkrul,data:vars,dataType:'JSON',success:function(results){
if(results.action == 1){
//do something
}else if(results.action == someOtherValue){
$(container).find('.orders').html(results.order).slideDown(300);
}else{
alert(results.error); //Or put the error in some div
}
//any other code or if/else statement
});
}
答案 2 :(得分:0)
这也是一种选择。
<强> HTML 强>
<input type='text' class='email' />
<input type='password' class='pass' />
PHP - checkLogin.php
<?php
$action = 0;
$order = 0;
$error = 0;
if(isset($_POST['email'], $_POST['pass'])) {
if(!empty($_POST['email']) && !empty($_POST['pass'])) {
$user = get_user($email);
if($user && $user['pwd'] == $_POST['pass']){
if($user['status'] == 1){
$action = 1;
} else {
$order = 'Unauthorised';
}
} else {
$error = 'invalid';
}
} else {
$error = "Empty";
}
$array = array('action'=>$action,'error'=>$error,'order'=>$order);
echo json_encode($array);
}
<强>的Javascript 强>
function checkLogin(){
var email = $('.email').val();
var pass = $('.pass').val();
$.post('checkLogin.php', {email:email,pass:pass}, function(response) {
var result = $.parseJSON(response);
if(response['action'] == 1) {
//authorized
} else if(response['order'] == 'Unauthorised') {
//unauthorized
} else {
//error
}
});
}