此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']));
?>
'async:false' - ** BAD **。特別是對於使用同步請求登錄等簡單事情來說,這是完全不必要的和錯誤的。 – ThiefMaster 2012-04-21 19:22:47
我會在SO上發佈之前閱讀警告。它清楚地說使用['date_default_timezone_set()'](http://php.net/manual/en/function.date-default-timezone-set.php)來設置時區,因爲它認爲你不應該依賴其默認值。如果您不瞭解該警告,請嘗試使用谷歌搜索的一部分。你可能不是第一個體驗過它的人。 – 2012-04-21 19:24:27
我想不出一種比您在問題中發佈的PHP警告中提供的更好的答案。 – Hamish 2012-04-21 19:34:37