簡體   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