[英]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.