盤問一個關於JS AJAX POST Json資料,PHP接收資料的方法

來源:互聯網
上載者:User
詢問一個關於JS AJAX POST Json資料,PHP接收資料的方法
先說一下,我是直接用JS,沒有用其他庫,所以麻煩大家不要用其他庫來做為例子
問題是這樣,我用JS指令碼寫了一個AJAX方法如下

var pageNow=this.className.substr(4);
var dID=document.getElementById("dID").value;
var url="OOXX";
var jsonData={
"HdType":"3",
"dID":dID,
"content":content
};
var data={data:jsonData};
var contentType="application/json";
var ajax=new Simple.Ajax("POST", url, receive4, data,contentType); //receiveInfo是一個方法名
ajax.SendRequest();

裡面Simple.Ajax是封裝好了的,方法中receive4是AJAX回調方法,contentType是資料頭,data就是我要發送的資料.大概能看得懂吧..
我舉個例子,之前我用POST發送簡單資料的時候,data的格式就是"key1=value1&key2=value2"這樣,然後服務端用PHP的擷取方法就是$_POST["key1"],或者$_POST["key2"]這樣子
現在考慮到value1或者value2的值本身就可能包含"&"這個符號,所以想用JSON一次把整個對象POST到伺服器,但是現在有個問題,不知道怎麼用PHP去擷取這個資料,我用$_POST["data"]擷取到的是空的,直接print_r($_POST)也沒有得到資料,請問如何通過PHP擷取資料?
------解決方案--------------------
由於你沒告訴我們你的 Simple.Ajax 是如何寫的,那麼也只能從原理上說一下
1、如果使用 post 方式發送,那麼必須有 Content-Type = application/x-www-form-urlencoded 的聲明
否則 php 不會將出傳入的資料解析到 $_POST 數組
你發了一個 contentType = application/json 的聲明,即便你的 Simple.Ajax 會自動補上一個 Content-Type = application/x-www-form-urlencoded 的聲明。這兩個相佐的聲明也會使 php 無所適從
2、你發送的資料是 {data:jsonData},這是一個 js 對象。即使能夠發送成功,php 也會因為不認識這個對象,而無法解析。凡是與外界進行交換的資料結構,都需要按雙方約定的格式序列化成字串

假定你的 Simple.Ajax 可以將 js 的對象轉換成 JSON 格式串
並且你也去掉了 contentType = application/json 的聲明
那麼你在 $_POST 中可以看到以那個 JSON串為鍵的元素
如果你堅持不願意去掉 contentType = application/json 的聲明
或許你個用 file_get_contents('php://input') 取到傳入的內容

------解決方案--------------------
如果有 Content-Type=application/json 聲明,$_POST 是不會有資料的
------解決方案--------------------
file_get_contents('php://input')
但不保證能成功

application/json 只是伺服器給使用者用的,告訴使用者:你可把內容解釋成一個 json 對象
就好比 image/png 是說這是一個 png 圖片一樣

而使用者向伺服器發送資料時,只有
application/x-www-form-urlencoded
multipart/form-data
text/plain
三種聲明
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.