簡體   English   中英

JavaScript范圍和Ajax調用無法正常工作

[英]Javascript scope and Ajax call doesn't work correctly

我有一些問題。

首先,我的php文件shoutbox.php,用於登錄用戶。

session_start();

if(! isset($_SESSION["loggedIn"])) {

 include "login.html";

}

else {

    if(isset($_POST["submit"]) && $_POST["submit"] == "Log In") {

        if(! isset($_POST["username"]) || $_POST["username"] == "" || ! isset($_POST["password"]) ||  $_POST["password"] == "")  {

            $GLOBALS["logErr"] = "Please, filln all fields!";

            echo json_encode(false);
        }

        else if(isset($_POST["username"]) && $_POST["username"] != "" && isset($_POST["password"]) && $_POST["password"] != "") {

            if(isset($_POST["select"]) && $_POST["select"] != "") {

                session_start();

                $_SESSION["loggedIn"] = TRUE;
                $_SESSION["username"] =  $_POST["username"];
                $_SESSION["password"] = $_POST["password"];
                $_SESSION["type"] = $_POST["select"];
                $_SESSION["ip"] = get_ip_address(); /* Return current ip */

                $user = array(
                              "username" => $_SESSION["username"],
                              "islogged" => $_SESSION["loggedIn"],
                              "password" => $_SESSION["password"],
                              "ip" =>  $_SESSION["ip"],
                              "type" =>  $_SESSION["type"]
                              );

                echo json_encode($user); 

            }
        }
    }

    else if(isset($_POST["logout"]) && $_POST["logout"] == "Log Out") {

        session_start();

        unset($_SESSION["loggedIn"]);
        unset($_SESSION["username"]);
        unset($_SESSION["password"]);
        unset($_SESSION["type"]);
        unset($_SESSION["ip"]);

        echo json_encode(false);
    }

    if(isset($_SESSION["loggedIn"]) && $_SESSION["loggedIn"] == TRUE) {

  echo json_encode(true); /* user is logged in */



    }

  else {

        echo json_encode(false); /* user is not logged in */

  }

}

它返回false或true,如果為true,則返回用戶數組編碼。

這是Ajax調用,我必須調用2個響應,即false或true,如果響應為true,則還要調用用戶數組。

function sb_UserIsLoggedIn() {
                              $.ajax({
                                  url: 'shoutbox.php',
                                  type: 'POST',
                                  dataType: 'json',

                                  success: function(response, user) {

                                    if(response) {

                                             function user(user) {                                             

                                      CurrUserInfo = {
                                          u_name: user["username"],
                                          u_psw: user["password"],
                                          ip: user["ip"],
                                          typelog: user["type"],
                                          logged: user["islogged"]
                                      };

                                      if(CurrUserInfo.typelog == "anonimous") {
                                          OnlineListObj.onlineList.anonimous.push(user["username"]);
                                      }
                                      else if(CurrUserInfo.typelog == "visible") {
                                          OnlineListObj.onlineList.visible.push(user["username"]);
                                      }

                                      OnlineListObj["onlineList"]["total"] = OnlineListObj.onlineList.anonimous.length + OnlineListObj.onlineList.visible.length;

                                      OnlineListObj["onlineList"]["phrase"] = lang["there_are"] + OnlineListObj.onlineList.total  + lang["online"] + OnlineListObj.onlineList.anonimous.length + lang["anonimous"] + OnlineListObj.onlineList.visible + lang["visibles"];

                                         LoggedIn = true;

                                      window.alert(LoggedIn);
                                      window.alert(OnlineListObj["onlineList"]["total"]);
                                      window.alert(OnlineListObj["onlineList"]["phrase"]);
                                      window.alert(CurrUserInfo.ip);
                                      window.alert(CurrUserInfo.typelog);
                                      window.alert(CurrUserInfo.logged);
                                      window.alert(CurrUserInfo.u_name);
                                      window.alert(CurrUserInfo.u_psw);


                                    }

                                  }

                                    else {

                                      window.location.href = "shoutbox.php";
                                    }

                                  },

                                  error: function(response) {
                                      sb_Error("Unknown error, try again");
                                      console.log(lang["ajax_error"]);
                                      console.log(response.responseText);


                                      LoggedIn = false;
                                  },
                              });
                          }

警報說這些沒有定義:

 window.alert(CurrUserInfo.ip);


   window.alert(CurrUserInfo.typelog);
                                      window.alert(CurrUserInfo.logged);
                                      window.alert(CurrUserInfo.u_name);
                                      window.alert(CurrUserInfo.u_psw);

這是因為對用戶數組的調用失敗了……但是一個調用可以正常工作,返回true或false。為什么它起作用,而另一個(對用戶數組)不起作用? 我想ajax調用true或false和用戶數組。

其他問題:

在有關sb_isUserLoggedIn()的代碼中,我定義了一個變量LoggedIn ...

但是,如果您在另一個函數中調用LoggedIn,則返回undefined:

 /* Checks if the user is online */

                function sb_isOn() {

                  sb_UserIsLoggedIn();

                    if(LoggedIn != false) {

                         return true;

                    } 

                    else {

                         return false;

                    }

              }  

如我所寫,此代碼返回錯誤,LoggedIn未定義。

我該如何解決所有這些問題?

提前致謝。

在我看來,PHP成功執行了兩次調用以echo json_encode() 一種回應用戶數組,另一種回應true 我認為這會導致JSON無效。

我建議您編寫PHP,以便它僅使一次調用echo json_encode() 您可以讓它返回以下成功信息:

echo json_encode(array("success" => true, "user" => $user));

以及以下失敗信息:

echo json_encode(array("success" => false, "message" => 'Please, fill in all fields!'));

然后,在Javacript中,您可以看到以下內容:

success: function(result) {
    if (result.success) {
        var user = result.user;
        // Do something with user here.
    } else {
        var message = result.message;
        // Do something with message here.
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM