2013-02-28 39 views
0

我使用wordpress作为我的基础并制作了自定义登录表单。Ajax登录返回修改标题错误

AJAX:

(function ($) { 
    jQuery(document).ready(function() { 

    $("#login_form").submit(function(event){ 
     //check the username exists or not from ajax 
     jQuery.ajax({ 
     type: 'POST', 
     url: my_ajax.ajaxurl, 
     data: $('#login_form').serialize(), 
     cache: false, 
     //dataType: 'json', 
     success: function(result) { 
      var result=trim(result); 
     if(result == 'success'){ 
      window.location='/my-dashboard'; 
      } else { 
      $('#message').html(result); 
      } 
      console.log(result); 
     } 
     }); 
     return false;  
    }); 
    }); 

function trim(str){ 
    var str=str.replace(/^\s+|\s+$/,''); 
    return str; 
} 

}(jQuery)); 

登录表单:

<p id="message" style="color:red;"></p> 
<form method="post" action="" id="login_form"> 

<div align="center"> 
<div > 
    Email : <input name="email" type="text" id="email" value="" /> 
</div> 
<div style="margin-top:5px" > 
    Password : 
    &nbsp;&nbsp; 
    <input name="password" type="password" id="password" value="" /> 
</div> 
    <div class="buttondiv"> 
     <input type="hidden" name="action" value="my_ajax_callback" /> 
     <input type="hidden" name="func" value="check_login" /> 
     <input name="submit" type="submit" id="submit" value="Login" style="margin-left:-10px; height:23px" /> <span id="msgbox" style="display:none"></span> 
    </div> 
</div> 
</form> 

的functions.php

// Ajax 
add_action('wp_ajax_nopriv_my_ajax_callback', 'my_ajax_callback'); 
add_action('wp_ajax_my_ajax_callback', 'my_ajax_callback'); 

// Your Login function 

function check_login($params){ 
    require_once('lib/hash.php'); 
    $session = new SC_Session; 
    // now you can use $session here 
    $message=array(); 

    if(isset($_POST['email']) && !empty($_POST['email'])){ 
    mysqli_real_escape_string($mysqli, $params['email']); 
    }else{ 
     $message[]='Please enter email'; 
    } 

    if(isset($_POST['password']) && !empty($_POST['password'])){ 
     $password= mysqli_real_escape_string($mysqli, $params['password']); 
    }else{ 
     $message[]='Please enter password'; 
    } 

    $countError=count($message); 
    if($countError > 0){ 
     for($i=0;$i<$countError;$i++){ 
      echo ucwords($message[$i]).'<br/><br/>'; 
     } 
    } else { 

    $hc=$mysqli->query("SELECT password FROM %table% email='".$email."' AND active=1"); 
    while($hp = $hc->fetch_object()) { 
     $stored_hash = $hp->password; 
    } 

    $hasherd = new PasswordHash(8, false); 
    $check = $hasherd->CheckPassword($password, $stored_hash); 

if($check) { 
    //now validating the username and password 
    $result=$mysqli->query("SELECT id, first_name, last_name, zip, email, password FROM %table% WHERE email='".$email."' AND active=1"); 
    while($row = $result->fetch_object()) { 
    //if username exists 
     if($result->num_rows > 0) 
     { 
      $date = date('Y-m-d h:i:s'); 
      $update_sql = $mysqli->query("UPDATE %table% SET last_login='".$date."'"); 

      $firstname = $row->first_name; 
      $lastname = $row->last_name; 
      $zip = $row->zip; 
      $user_id = $row->id; 
      $sex = $row->sex; 

      $session->set_userdata('user_id', $user_id); 
      $session->set_userdata('email', $email); 
      $session->set_userdata('firstname', $firstname); 
      $session->set_userdata('lastname', $lastname); 
      $session->set_userdata('zip', $zip); 
      $session->set_userdata('sex', $sex); 

     } 

    } 
    echo ucwords('success');  
    //return $params; 
    } else{ 
      echo ucwords('please enter correct user details'); 
     } 
    } 
} 
/** 
* Ajax Submit 
*/ 
function my_ajax_callback() { 
    $response = call_user_func($_POST['func'], $_POST); 
    header("Content-Type: application/json"); 
    echo json_encode($response); 
    exit; 
} 

登录目前的伟大工程,但每当一个错误是从$消息抛出它显示以及标题警告。

警告:无法修改标头信息 - /%wordpresslocation%/ wp-content /中已经发送的标头(输出开始于/%wordpresslocation%/wp-content/themes/%theme%/functions.php:77)上线86 空

ANSWER 我觉得自己像个白痴主题/%的主题%/ functions.php中,理解了它,我一直用JavaScript混合PHP作为我在PHP精通。

(function ($) { 
    jQuery(document).ready(function() { 
    $('#message').slideUp(); 
    $("#login_form").submit(function(event){ 
     $('#message').slideUp(); 
     //check the username exists or not from ajax 
     jQuery.ajax({ 
     type: 'POST', 
     url: my_ajax.ajaxurl, 
     data: $('#login_form').serialize(), 
     dataType: 'json', 
     success: function(params) { 
     if(params == 'success'){ 
     $('#message').html(params).fadeIn(); 
      document.location='/my-dashboard'; 
      } else { 
       $('#message').html(params).fadeIn(); 
      } 
     } 
     }); 
     return false;  
    }); 
    }); 
}(jQuery)); 

和改变

echo ucwords('success');  
     //return $params; 
     } else{ 
       echo ucwords('please enter correct user details'); 
      } 

$params = 'success';  
    return $params; 
}else{ 
    $params = 'fail'; 
    return $params; 

并且因为印刷错误发回的PARAMS

function check_login($params){ 

回答

2

那(回声ucwords('请选择正确的用户细节');)

然后,您尝试设置标题。这是不可能的,标题总是必须在其他任何东西之前设置(这就是http的工作方式)

您将不得不重写在发送标题之前打印文本的部分。它也不会发送有效的json,所以它无论如何不会工作