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

时间:2015-03-30 00:14:55

标签: javascript php json

所以我有一个表单,我把它的输入内容,把它们放到一个数组中,把它变成一个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'),它也发送了一个空字符串。

2 个答案:

答案 0 :(得分:0)

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

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

进行检索

有关进一步的讨论,请参阅file_get_contents("php://input") or $HTTP_RAW_POST_DATA, which one is better to get the body of JSON request?

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

答案 1 :(得分:0)

如果您将JSON放入帖子正文中,则无法从$ _POST获取数据。 看到这个问题Receive JSON POST with PHP。 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并查看请求的有效负载和响应对您有所帮助。