首页 > 解决方案 > 未通过 XMLHttpRequest 发送数据

问题描述

我用来向我的 PHP 发送一些信息的脚本有一个奇怪的问题。我说很奇怪,因为这段代码是同一个应用程序上一些已经在工作的代码的直接副本,带有新的变量名。我需要将少量数据上传到我的服务器,虽然值在那里并且代码一直运行,但没有发送 POST 数据或其他东西。我已经检查过了,它说它已经提交给我的 PHP,但没有任何反应。如果对我的某些格式有疑问,我正在使用 Vue.js

我曾尝试在网上查看其他示例,但我认为这是从我的应用程序的工作部分复制的代码块。它一直有效,直到从 JS 传输数据 - PHP

JS

editDisplayName: function() {
      var self = this;
      var newName = prompt("10 Characters Max, 3 Min", "Enter Display Name");
      if(newName.length <= 10 && newName.length >= 3 ) {
          var sendData = new XMLHttpRequest();
          sendData.open("POST", "primary.php", true);
          sendData.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          sendData.send(newName);
          self.username = window.localStorage.getItem('username');
          window.localStorage.clear();
      }
  }

PHP

function changeUsername() {
     // Connect to Server
     $link = // Commented Out For Security;
     if (mysqli_connect_error()) {
         die ("DB Connection Error");
     }
     $newName = $_POST['newName'];
     $newName = mysqli_real_escape_string($link, $newName);
     $token = $_COOKIE['validToken'];
     $token = mysqli_real_escape_string($link, $token);
     $query = "UPDATE userData SET username = '$newName' WHERE token = '$token' LIMIT 1";
     mysqli_query($link, $query);
     mysqli_close($link);
     echo("
         <script>
             var username = $newName;
             window.localStorage.setItem('username', username);
         </script>
     ");
 }
 if(isset($_POST['newName'])) {
     changeUsername();
 }

我期待在我的 DOM 上设置新的用户名,但它是空白的。东西停止工作的地方是发送 POST 数据的地方,因为我的 PHP 没有收到任何东西,但我不知道出了什么问题。

标签: javascript

解决方案


不仅要发送值,还应该发送参数名称

因此,不要使用 ,而是sendData.send(newName);尝试使用:

sendData.send("newName=" + newName);

(因为您的 Content-type 是application/x-www-form-urlencoded

或者,如果您想使用 JSON:

将您的 Content-type 更改为application/json,然后将数据作为 JSON 字符串发送,如下所示:

sendData.send(JSON.stringify({'newName': newName}));

推荐阅读