Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺返回get 500内部服务器错误_Javascript_Php_Ajax_Ecmascript 6_Promise - Fatal编程技术网

Javascript 承诺返回get 500内部服务器错误

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) => {

我制作了一个PHP函数,在提交表单后使用echo的JSON,我希望通过一个promise请求与之交互。我一直收到一个500内部服务器错误,我不知道为什么

这是我的文件-这是registerFail.js,它应该在表单提交后获取JSON,以便我可以提醒消息,它位于主目录中:

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'];