javascript - 到 PHP 的 AJAX POST (JQuery) 不起作用。我该如何解决?
问题描述
我有一段时间面临 POST 问题,但我仍然无法解决它。AJAX 不会将数据(我认为)发送到文件夹login.php
中的 php 文件php
。我仍然收到错误,索引 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 = 2M
,upload_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);
}
});
login.php
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
in更改/php/login.php
为一个字符串,它就可以工作。例子:$mainusername = "DaRealAdalbertBro";
感谢您的所有回复,Adalbert。
解决方案
已经有一段时间了,但我几天前不小心解决了这个问题。在我的 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]
此代码删除.php
了 Web URL 的后缀。问题是我将这些数据发送到带有后缀的文件中。因此,如果您也有此文件,则简单的解决方法是重写action="login.php"
为 just 。action="login"
推荐阅读
- c# - Blazor Wasm 将内部对象视为 null,我不知道为什么。(使用 VS 2022/.net core 6)
- java-melody - 如何使用 curl 命令在 javamelody 监控中列出所有添加的应用程序?
- android - 如何在 ionic to andoid 应用程序中正确使用 feGaussianBlur 过滤器?
- postgresql - 如何在postgresql的列中的所有行上应用翻译函数
- docker - 无法将本地目录复制到 Docker 容器中
- graphql - 在 gql 上下文中获取下一个身份验证用户会话时遇到问题
- sql - 表列 - 包含“高度”和“宽度”键/值对的对象列表
- python - z3给出了令人惊讶的答案
- node.js - 在 Node.js 中使用 YAML 变量
- android - Android JDBC不关闭连接,postgresql告诉我它有太多连接(检查后是真的)