AJAX致命错误后列不能为空

时间:2019-07-28 04:10:43

标签: javascript php mysql ajax post

我遇到一个致命错误,“列不能为空。”

index.php

<head>
  <script>
    let xhr = window.XMLHttpRequest
      ? new XMLHttpRequest()
      : new ActiveXObject('Microsoft.XMLHTTP')
    xhr.open('POST', 'ajax.php', true)
    xhr.setRequestHeader('content-type', 'applications/x-www-form-urlencoded')
    xhr.send('sld=testing&tld=com&registrar=namecheap')
  </script>
</head>

ajax.php

var_dump($_POST);    // without these var_dumps
var_dump($_REQUEST); // i receive a 500 error (internal server error)

if ($_SERVER["REQUEST_METHOD"] === "POST"){
  include "includes/connect_to_database.php";
  $pdo = $connection->prepare("INSERT INTO domains (sld, tld, registrar) VALUES (:sld, :tld, :registrar)");
  $pdo->execute(array(
    ":sld" => $_REQUEST["sld"],
    ":tld" => $_REQUEST["tld"],
    ":registrar" => $_REQUEST["registrar"]
  ));
  $connection = null;
}

开始:connect_to_database.php

try {
  $connection = new PDO("mysql:host=$dbhost; dbname=$dbname; charset=utf8", $dbuser, $dbpass);
  $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully!";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage() . ".";
}

MySQL表架构

enter image description here

  • 它说,罪魁祸首列是sld,所以好像没有任何数据向前传递。
  • responseText也为空。
  • 我也使用$_POST得到了完全相同的错误。
  • var_dump($_REQUEST)var_dump($_POST)都在响应中返回空数组。
  • 我尝试在帖子字符串上使用encodeURIComponent,但没有用。
  • 值得注意的是,如果我删除var_dump语句,则会收到500错误(内部服务器错误)。

是不是我没有发送所有必要的标头?

对于不转发数据我到底在做错什么?

1 个答案:

答案 0 :(得分:2)

您使用了错误的请求标头。 将其更改为

xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')

代替

applications/x-www-form-urlencoded 在这里注意一个“ s”。

我认为您可能不需要 $_POST$_REQUEST同时进行。因此,您可以删除其中之一。