2012-04-21 67 views
2

此php代码通过javascript中的ajax调用,并应返回数字代码和消息。我可以从PHP脚本中返回一个数组,但是当我读取ajax响应时,响应包含的不止是返回的数组,它还有其他的回显语句。有没有办法从Php发送只有返回数组的信息?我只想要json对象{"return_code":0,"return_msg":"Login successful."}带返回码和返回信息的PHP函数用于信息目的

这是通过ajax返回给javascript的信息alert(login_info);

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the 

date_default_timezone_set()函数。如果您使用这些 方法中的任何一种,并且您仍然收到此警告,则极有可能是 拼写错误时区标识符。我们选择'America/New_York'作为 'EDT/-4.0/DST'而不是 /Library/WebServer/Documents/Pagelinks_Dev/login_user.php on line 60 {“return_code”:0,“return_msg”:“登录成功“}

这是ajax调用。

var message = $.ajax({ 
    url: "login_user.php", 
    type: "POST", 
    data: { username_email: username_email, upass: user_passwd }, 
    cache: false, 
    async: false, 
    success: function (login_info) { 
     if (login_info != '') 
     { 
      alert(login_info); 
     } 
    }, 
    error: function (request, status, error) { 
     alert ("status "+status+" error "+error+"responseText "+request.responseText); 
    }, 
}).responseText; 

PHP脚本

<?php include("dbconnect.php"); ?> 

<?php 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 
session_start(); 

function login_user($username_email, $password_text) { 
    global $dbco; 

    $password = md5($password_text); 
    $privPost = 1; // 3: max. 
    $privSedit = 0; 

    $messages = array('log_no_un_em' => 'Enter username or email.', 
      'log_no_pw' => 'Enter password.', 
      'log_un_em_pw_incorrect' => 'Incorrect login info.', 
      'log_success' => 'Login successful.' 
    ); 

    $return = array(); 

    $l_un_em = isset($username_email) ? $username_email : ''; 
    $l_pword = isset($password_text) ? $password_text : ''; 

    if (!$l_un_em) { 
     /* echo $messages['log_no_un_em']; 
     return; */ 
     $return['return_code'] = -1; 
     $return['return_msg'] = $messages['log_no_un_em']; 
     echo json_encode($return); 
    } 
    if (!$l_pword) { 
     /* echo $messages['log_no_pw']; 
     return; */ 
     $return['return_code'] = -1; 
     $return['return_msg'] = $messages['log_no_pw']; 
     echo json_encode($return); 
    } 

    mysql_select_db("luxcal", $dbco); 

    while (true) { 
     $md5_pw = md5($password_text); 
     $r_getuser = mysql_query("SELECT * FROM users WHERE (user_name = BINARY '".mysql_real_escape_string($l_un_em)."' OR email = '".mysql_real_escape_string($l_un_em)."') AND (password = '$md5_pw' OR temp_password = '$md5_pw') AND status >= 0"); 
     if (mysql_num_rows($r_getuser) == 0) { 
      /* echo $messages['log_un_em_pw_incorrect']; 
      return; */ 
      $return['return_code'] = -1; 
      $return['return_msg'] = $messages['log_un_em_pw_incorrect']; 
      echo json_encode($return); 
     } 
     $row = mysql_fetch_assoc($r_getuser); 
     /* if ($row['privs'] < 1) { echo $messages['log_no_privs']; break; } */ 
     if ($row['temp_password'] == $md5_pw) { //new password 
      mysql_query("UPDATE users SET password = '".$md5_pw."', temp_password = NULL WHERE user_id = '{$row['user_id']}'"); 
     } 
     $today = date('Y-m-d'); 
     if ($row['login_0'][0] == '9') { //first login 
      mysql_query("UPDATE users SET login_0 = '".$today."', login_1 = '".$today."', login_cnt = 1 WHERE user_id = '{$row['user_id']}'"); 
     } else { 
      mysql_query("UPDATE users SET login_1 = '".$today."', login_cnt = login_cnt+1 WHERE user_id = '{$row['user_id']}'"); 
     } 
     $_SESSION['uid'] = $row['user_id']; 
     $_SESSION['unm'] = stripslashes($row['user_name']); 
     $_SESSION['uml'] = stripslashes($row['email']); 
     $_SESSION['cL'] = $row['language']; 
     /* echo '<meta http-equiv="refresh" content="0;url=livemass_CENTER34.php">'; */ //default page 
     break; 
    } 

    $return['return_code'] = 0; 
    $return['return_msg'] = $messages['log_success']; 

    echo json_encode($return); 
    /* return; */ 
} 

echo login_user(trim($_REQUEST['username_email']), trim($_REQUEST['upass'])); 

?> 
+2

'async:false' - ** BAD **。特别是对于使用同步请求登录等简单事情来说,这是完全不必要的和错误的。 – ThiefMaster 2012-04-21 19:22:47

+3

我会在SO上发布之前阅读警告。它清楚地说使用['date_default_timezone_set()'](http://php.net/manual/en/function.date-default-timezone-set.php)来设置时区,因为它认为你不应该依赖其默认值。如果您不了解该警告,请尝试使用谷歌搜索的一部分。你可能不是第一个体验过它的人。 – 2012-04-21 19:24:27

+2

我想不出一种比您在问题中发布的PHP警告中提供的更好的答案。 – Hamish 2012-04-21 19:34:37

回答

0

如果你想返回JSON,你不能有JSON字符串输出的任何其他文本。更改ini_set('display_errors', 1);ini_set('display_errors', 0);

+3

修复错误比隐藏它们好。 – DCoder 2012-04-21 19:30:37

+0

的确如此。我宁愿显示错误,仍然有办法检索json对象。但是,我能够通过关闭错误来分离json对象 – user823527 2012-04-21 19:35:34

+0

@DCoder这是一个警告,而不是一个错误。 – jessica 2012-04-21 20:17:03

2

在你的PHP文件中使用

date_default_timezone_set('your time zone'); 

告诉PHP你的时区是什么。详情请参阅date_default_timezone_set()

+1

有了更多的信息(什么可以放在引号内?),我会说这个答案可能比接受的更好。 – 2012-04-21 19:42:37

+0

这将根据您的要求而改变......如果您的网站与任何特定的国家或地区有关...例如美国的洛杉矶,它会是......date_default_timezone_set( '美洲/洛杉矶'); – 2012-04-22 05:39:25

+0

也许你可以使用的所有有效时区列表的链接将有助于OP ... – 2012-04-22 06:10:26