繁体   English   中英

访问和解码从JavaScript发送到PHP的JSON

[英]Accessing and decoding JSON sent from JavaScript to PHP

因此,我有了一个表单,我将其输入的内容放入一个数组中,制成一个JSON,然后将其发送给PHP,这样它便可以依次解码并将其输入数据库。 我知道只使用<form method="POST" action="phpfile.php">会更容易,但是我无法将其重定向到另一个页面,尤其是因为我的PHP未嵌入HTML中,异地处理事务。 否则,使用$_POST["name"]来获取我需要的东西会更简单。 尽管如此,该页面尤其应该被用来创建用户,接收服务器响应,该用户已被输入数据库,然后被提示带有重定向到主页的按钮的警报。

因此,无论如何,这是整个过程的相关部分。

JavaScript:

window.onload = function findSubmitButton() {
    var button = document.querySelector(".send_info").addEventListener("click", serverInteraction);
}

    function serverInteraction() {
      var xmlhttp;
      var inputArray;
      var finalArray = [];
      var JSONArray;
      if (window.XMLHttpRequest){
          xmlhttp = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } else {
          throw new Error("Your browser is not compatible with XMLHTTP");
          return false;
      }
      inputArray = document.querySelectorAll("input[type=text]");
      for(var i = 0; i < inputArray.length; i++){
          finalArray[i] = inputArray[i].value;
      }
        console.log(finalArray);
        JSONArray = JSON.stringify({finalArray: finalArray}); 
        console.log(JSONArray);
        xmlhttp.open("POST","phpFiles/sendUserInfo.php", true);
        xmlhttp.setRequestHeader("Content-type","application/json");
        xmlhttp.send(JSONArray);

    }

PHP:

<?php
    $finalArray = json_decode($_POST['finalArray']);
    var_dump($finalArray);
?>

那个var_dump只是返回一个null ,使用echo没有给我任何东西,除了警告我的数组变量没有通过XDebug初始化。 我不太确定自己在这里做错了什么,我一直在按照教程中的说明进行操作,并且不会生成数组。 我也尝试过$_POST['JSONArray']但运气不佳,以防万一。 还尝试了file_get_contents('php://input') ,它也发送一个空字符串。

您通过将数据发送为"Content-type","application/json"来绕过$_POST

数据将改为在请求正文中设置,并且可以使用file_get_contents("php://input")进行检索

有关进一步的讨论,请参见file_get_contents(“ php:// input”)或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?

通常不需要将您的数据作为json发送到php

如果将JSON放在帖子正文中,则无法从$ _POST获取数据。 看到这个问题, 用PHP接收JSON POST php无法正确处理application/json

对于您的var_dump为空,请尝试以下操作

var_dump(file_get_contents('php://input'));
var_dump(json_decode(file_get_contents('php://input'), true));

您将看到您的数据。

而且,如果您发送数据而未将其更改为JSON,则会得到错误的数据。

例如:您的finalArray['a','b','c'] ,然后直接发送它。

var_dump(file_get_contents('php://input'));

您将看到php得到了字符串a,b,c而不是['a','b','c']

因此,如果要使用$ _POST接收数据,则需要使用application/x-www-form-urlencoded 您可以使用jQuery来做到这一点。 参见http://api.jquery.com/jquery.ajax/

 $.ajax({
    method: "POST",
    url: "some.php",
    data: { name: "John", location: "Boston" }
   })
   .done(function( msg ) {
      alert( "Data Saved: " + msg );
   });

它将您的js对象序列化为x-www-form-urlencoded并且php将正确处理它。

使用chrome的开发工具,切换到network并查看请求有效负载和响应将对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM