2012-04-21 98 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