簡體   English   中英

AJAX POST (JQuery) 到 PHP 不起作用。 我該如何解決?

[英]AJAX POST (JQuery) to PHP is not working. How can I fix it?

我面臨 POST 問題有一段時間了,但仍然無法解決。 阿賈克斯不發送數據(我認為)我的PHP文件login.phpphp文件夾中。 我仍然收到錯誤,索引 usernameData 未定義/不存在。

Uncaught TypeError: Cannot use 'in' operator to search for '119' in <br />
<b>Notice</b>:  Undefined variable: mainusername in <b>/var/www/html/php/login.php</b> on line <b>17</b><br />
[]
    at s (jquery.min.js:2)
    at Function.each (jquery.min.js:2)
    at Object.success (login.js:131)
    at j (jquery.min.js:2)
    at Object.fireWith [as resolveWith] (jquery.min.js:2)
    at x (jquery.min.js:4)
    at XMLHttpRequest.<anonymous> (jquery.min.js:4)

有時它也不返回任何內容,只是一個空白的控制台日志。

信息:

  • 我使用 apache2、ubuntu 21.04、php7.4
  • php.ini文件: post_max_size = 2Mupload_max_filesize = 8M
  • login.js文件:
      $.ajax({
          type: "POST",
          url: "/php/login.php",
          data: {
            usernameData: "DaRealAdalbertBro",
            passwordData: "123"
          },
          cache: false,
          success: function(datas){
            $.each(datas, function(idx, loginData){
              console.log(loginData.name)
              console.log(loginData.password)
            });
          },
          error: function(xhr, status, error) {
          console.error(xhr.responseText);
          console.error(status);
          console.error(error);
          }
      });
  • php文件夾中的login.php文件:
    <?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$servername = "AA";
$database = "BB";
$username = "CC";
$password = "DD";

$conn = new mysqli($servername, $username, $password, $database);

if ($conn->connect_error) {
  console.log("Connection failed: " . $conn->connect_error);
}


$mainusername = $_POST['usernameData'];
$mainpassword = $_POST['passwordData'];

$sql = "SELECT * FROM user WHERE username='$mainusername'";
$results = mysqli_query($conn, $sql);

$rawlogindata = array();
while ($row = mysqli_fetch_array($results)) {
  $arrayData = array(
    "name"         => $row['username'],
    "password"          => $row['pass']
  );
  $rawlogindata[] = $arrayData;
}

echo json_encode($rawlogindata);

mysqli_close($conn)
?>
  • 我的login.html表單:
<form class="sign-in-form" action="login.php" method="POST" id="logform" autocomplete="off">
    
    <h2 class="title">Log in</h2>

    <div class="input-field">
        <i class="fas fa-user"></i>
        <input type="text" name="usernameData" placeholder="Username" minlength="4" maxlength="24" id="logusername" onfocusout="checkInputsUsernameLogin()" onkeyup="cleanUsername('logusername')" onkeydown="cleanUsername('logusername')" />
        <i class="erroricon fas fa-exclamation-circle"></i>
        <small class="form-login-message">Unknown Error - please contact the support.</small>
    </div>
    <div class="input-field">
        <i class="fas fa-lock"></i>
        <input type="password" name="passwordData" placeholder="Password" onpaste="return false;" ondrop="return false;" minlength="8" maxlength="255" id="logpassword" onfocusout="checkInputsPasswordLogin()" onkeyup="cleanPassword('logpassword')" onkeydown="cleanPassword('logpassword')" />
        <i class="erroricon fas fa-exclamation-circle"></i>
        <small>Unknown Error - please contact the support.</small>
    </div>

    <input type="submit" value="Login" class="btn solid" name="loginbutton" />
    

    <p class="social-text">Or Login with social platforms</p>


    <div class="social-media">
        <a href="#" class="social-icon">
            <i class="fab fa-discord"></i>
        </a>
        <a href="#" class="social-icon">
            <i class="fab fa-twitter"></i>
        </a>
        <a href="#" class="social-icon">
            <i class="fab fa-google"></i>
        </a>
        <a href="#" class="social-icon">
            <i class="fab fa-github"></i>
        </a>
    </div>
</form>
  • 另外,如果我將$mainusername中的$mainusername /php/login.php為一個字符串,它也可以工作。 示例: $mainusername = "DaRealAdalbertBro";

感謝您的所有回復,阿達爾伯特。

您已經在 login.php 中使用了 $mainusername 但您還沒有聲明。 我猜你是想從表單中獲取數據並選擇它。 您的 SQL 查詢是錯誤的。 請更新。

有一段時間了,但我前幾天不小心解決了這個問題。 在我的 VPS 上,我有一個.htaccess文件,其中是:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

此代碼正在刪除 Web URL 的.php后綴。 問題是,我將這些數據發送到帶有后綴的文件中。 所以簡單的解決方法是將action="login.php"重寫為action="login.php" action="login" ,如果你也有這個文件的話。

感謝您的所有回復和提示,
我希望這個解決方案對其他人有幫助,
阿達爾伯特

暫無
暫無

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

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