簡體   English   中英

承諾返回得到500個內部服務器錯誤

[英]Promise returning get 500 internal server error

我制作了一個PHP函數,該函數在提交表單后回顯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);
        });
    });
}

這是我的控制器php類,位於目錄/controllers/add-user.php中,這是registerFail.js中的promise應該從中獲取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: /'); 

-> nameTaken函數是回顯的JSON。

這是位於不同目錄和文件中的nameTaken函數-

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。

所以我認為我的問題是,在單擊提交按鈕后,promise會立即執行,但是我需要在php json文件加載后執行,所以我不會在控制台中看到500服務器錯誤,也不會出現服務器錯誤從上面顯示的我的終端。

php文件加載后,如何重定向到“ /”頁面,我如何才能履行承諾?

我只是發現了煩惱,並使用了它們。 這是我在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:/");

然后,使會話等於表單上頁面的控制器類中的變量

session_start();

$error = $_SESSION['error'];

然后,我在表單頁面中創建了一個if語句,以顯示$ error變量(如果已設置),然后取消會話設置以及其工作方式。

暫無
暫無

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

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