Javascript 承诺返回get 500内部服务器错误
我制作了一个PHP函数,在提交表单后使用echo的JSON,我希望通过一个promise请求与之交互。我一直收到一个500内部服务器错误,我不知道为什么 这是我的文件-这是registerFail.js,它应该在表单提交后获取JSON,以便我可以提醒消息,它位于主目录中:Javascript 承诺返回get 500内部服务器错误,javascript,php,ajax,ecmascript-6,promise,Javascript,Php,Ajax,Ecmascript 6,Promise,我制作了一个PHP函数,在提交表单后使用echo的JSON,我希望通过一个promise请求与之交互。我一直收到一个500内部服务器错误,我不知道为什么 这是我的文件-这是registerFail.js,它应该在表单提交后获取JSON,以便我可以提醒消息,它位于主目录中: window.onload = function(){ function get(url) { return new Promise((resolve, reject) => {
window.onload = function(){
function get(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = () => resolve(xhr.responseText);
xhr.onerror = () => reject(xhr.statusText);
xhr.send();
});
}
document.getElementById('register').addEventListener('submit', () => {
let promise = get('/controllers/add-user.php').then((name) => {
console.log(name);
});
});
}
这是我在/controllers/add-user.php目录中的控制器php类,registerFail.js中的承诺应该从中获取json
header('Content-type: text/javascript');
$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);
if(!$app['database']->nameTaken($_POST['username'])){
$app['database']->insert('users', [
'name' => $_POST['username'],
'password' => $hash
]);
};
header('Location: /');
->nametake函数就是echo的JSON
以下是位于不同目录和文件中的NameTake函数-
public function nameTaken($username){
$statement = $this->pdo->prepare('SELECT count(*) FROM users WHERE name = :name');
$statement->execute(array('name' => $username));
$res = $statement->fetch(PDO::FETCH_NUM);
$exists = array_pop($res);
if ($exists > 0) {
$json = array(
'success' => false
);
echo json_encode($json);
return true;
} else {
//the name can be made
return false;
}
}
在我的服务器中,我收到以下消息:
[Thu Aug 16 12:16:18 2018] 127.0.0.1:44906 [200]: /
[Thu Aug 16 12:16:18 2018] 127.0.0.1:44910 [200]: /registerFail.js
[Thu Aug 16 12:16:22 2018] PHP Notice: Undefined index: password in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 5
[Thu Aug 16 12:16:22 2018] PHP Notice: Undefined variable: app in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 7
[Thu Aug 16 12:16:22 2018] PHP Fatal error: Uncaught Error: Call to a member function nameTaken() on null in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php:7
Stack trace:
#0 {main}
thrown in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 7
[Thu Aug 16 12:16:22 2018] 127.0.0.1:44996 [500]: /controllers/add-user.php - Uncaught Error: Call to a member function nameTaken() on null in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php:7
Stack trace:
#0 {main}
thrown in /home/orpheus/Practice_dev/imagePoster/controllers/add-user.php on line 7
[Thu Aug 16 12:16:22 2018] 127.0.0.1:45000 [200]: /users
看起来我的承诺正在执行,并试图在php文件加载之前获取json,因此没有json,我得到了这些未定义变量的错误。在加载/users(/controllers/add user.php)php json文件之前的一瞬间,我看到了500个错误,并在我的服务器中看到了上面所有的错误,但是当php文件从表单中加载帖子时,它都正常工作,我看到了正确的json,但是当我被重定向回“/”主文件时,控制台已被清除,我的承诺不在console.log中记录json
因此,我认为我的问题是,在点击提交按钮后,承诺会立即执行,但我需要在加载php json文件后执行,这样我就不会在控制台中看到500服务器错误,也不会从上面显示的终端中看到服务器错误
在加载php文件并重定向回“/”页面后,如何获得执行承诺 我刚刚发现了sessions,并且使用它们很有效。下面是我在add-user.php中的代码
<?php
session_start();
$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);
if(!$app['database']->nameTaken($_POST['username'])){
$app['database']->insert('users', [
'name' => $_POST['username'],
'password' => $hash
]);
} else {
$_SESSION['error'] = 'Username is taken';
}
header("location:/");
然后我在我的表单页面中做了一个if语句来显示$error变量if的设置,然后取消设置会话及其工作方式
500
错误代码是服务器问题。请再次检查您的服务器端代码。“我一直收到500个内部服务器错误,我不知道为什么”-是时候查看您服务器的错误日志文件了。为什么?使用echo json_encode($json)代码>在公共函数名称中($username){
@hamedhossani该函数用于检查我的数据库中是否已存在名称。如果名称已存在,该函数将返回false,我将回显json,以实现我的承诺,这样我可以对时髦的html发出警报,向用户显示该名称已存在。我是否应该将其放在其他位置?在服务器的图片日志中。“未定义索引:密码”是什么?是否发送密码参数?在第3行
session_start();
$error = $_SESSION['error'];