AJAX 发布致命错误列不能为空

Posted

技术标签:

【中文标题】AJAX 发布致命错误列不能为空【英文标题】:AJAX Post Fatal Error Column Cannot Be Null 【发布时间】:2019-12-05 20:25:30 【问题描述】:

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

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;

fwiw: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 表架构

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

可能是我没有发送所有必要的标头吗?

我到底做错了什么让数据不能被转发?

【问题讨论】:

你不应该使用$_POST而不是$_REQUEST吗? @Jaquarh 我试过$_POST,完全相同的错误。我实际上刚刚完成了更新我的问题 var_dump($_POST) 给你什么?你也不能使用JQuery吗? $.post() @Jaquarh 我也不知道。我在这里联系了一位朋友,他的程序员比我好得多,所以也许地狱能够发现问题 @Jaquarh 已解决。检查答案。你会想把你的头撞到墙上大声笑 【参考方案1】:

您使用了错误的请求标头。 改成

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

而不是

applications/x-www-form-urlencoded 注意这里的's'。

我想你可能不需要 $_POST$_REQUEST 同一时间。因此,您可以删除其中之一。

【讨论】:

太老兄了。我已经在这里待了几个小时了,哈哈 享受这一天:)

以上是关于AJAX 发布致命错误列不能为空的主要内容,如果未能解决你的问题,请参考以下文章

AJAX Post 请求错误:“不能为空”,[验证::required] 在 POST 正文中发送 JSON 对象时

错误:目标文件为空 .git/objects/../.. 为空 - 致命:松散的对象...已损坏

Laravel 7 错误 - SQLSTATE [23000]:完整性约束违规:1048 列 'first_name' 不能为空

在 symfony2 和 Doctrine 应用程序中出现“列不能为空”错误

“致命错误:在 ajax 中尝试更新数据库时调用 boolean() 上的成员函数 execute()”

Hive GenericUDF 错误 - RuntimeException typeInfo 不能为空