1. php和js如何通過json互相傳遞數據相關問題探討
當我們在結合php和javascript實現某些功能時,經常會用到json。json是js的一種數據格式,可以直接被js解析。
而php無法直接讀取json數據,但是php提供了json_decode函數來對json數據進行轉化,從而可以被php腳本訪問。同時,php也提供了json_encode函數來將數據轉化成json格式。
2. PHP JSON格式數據交互實例代碼詳解
在PHP中解析JSON主要用到json_encode和json_decode兩個PHP
JSON函數,比PHP解析XML方便很多,下面詳細介紹下PHP
JSON的使用。
JSON基礎介紹
JSON(JavaScript
Object
Notation)
是一種輕量級的數據交換格式。
JSON主要有兩種結構:
「名稱/值」對的集合,在PHP中可以理解為關聯數組
(associative
array)。
值的有序列表(An
ordered
list
of
values)。在PHP中可以理解為普通數組(array)。
對象是一個無序的「『名稱/值'對」集合。一個對象以「{」(左括弧)開始,「}」(右括弧)結束。每個「名稱」後跟一個「:」(冒號);「『名稱/值'
對」之間使用「,」(逗號)分隔。
數組是值(value)的有序集合。一個數組以「[」(左中括弧)開始,「]」(右中括弧)結束。值之間使用「,」(逗號)分隔。值(value)可以是雙引號括起來的字元串(string)、數值(number)、true、false、
null、對象(object)或者數組(array)。這些結構可以嵌套。
我目前對JSON的理解更偏向於數組,類似於PHP中的關聯數組,你可以將PHP數組轉換為JSON格式。
更多JSON的介紹請參考JSON官網和IBM關於JSON的介紹
PHP
JSON解析實例
PHP5.2開始已經將JSON作為PHP擴展的一部分,所以並不需要另外安裝JSON。另外為了保證下面的PHP
JSON實例不出現中文亂碼,請保證你的編碼格式為UTF8。
JSON是Javascript的一部分,首先我們看下Javascript中如何定義JSON
復制代碼
代碼如下:
var
json_obj
=
{'WebName':'PHP網站開發教程網'};
alert(json_obj.WebName);
var
json_arr
=[{'WebName':'PHP網站開發教程網','WebSite':'http://www.jb51.net'},{'ArtTitle':'PHP
JSON實例講解'}]
alert(json_arr[1].ArtTitle);
var
php_json
=
[['PHP網站開發教程網','http://www.jb51.net'],['文章標題','PHP
JSON實例講解']];
alert(php_json[1][0]);
在這段JSON實例代碼中我構建了所有的JSON形式,
第1行,定義了JSON以對象形式存在
第4行,定義了JSON以數組形式存在,嵌套了JSON對象,所以有點類似於PHP的關聯數組,其實仍然是對象。
第7行,定了JSON以普通數組形式存在。
注意:由於Javascript是區分大小寫的,所以訪問JSON關聯數組對象時注意key的大小寫問題。
PHP與JSON格式數據交互時,第一步需要將PHP數組轉換為JSON格式的數據,可使用PHP5自帶的json_encode函數,當PHP解析傳遞過來的JSON格式數據時需要使用json_decode函數進行解析轉換為PHP數組,PHP轉換並解析JSON數據的實例代碼如下
復制代碼
代碼如下:
<?php
$json_arr
=
array('WebName'=>'PHP網站開發教程網','WebSite'=>'http://www.jb51.net');
$php_json
=
json_encode($json_arr);
echo
$php_json;
$php_json
=
json_decode($php_json);
print_r($php_json);
?>
說明:這里通過PHP定義了關聯數組,然後通過json_encode轉換為JSON格式的數據,通過echo語句可以看到轉換後的JSON對象,通過PHP
JSON解析函數json_decode可以將JSON格式的數據解析為PHP的關聯數組。如果編碼不正確,JSON中文會出現亂碼。如果你使用Editplus調試PHP,請注意保存文件時編碼將ANSI改為UTF8。
最後我們來看下完整的PHP
JSON交互實例
復制代碼
代碼如下:
<?php
$json_arr
=
array('WebName'=>'PHP網站開發教程網','WebSite'=>'http://www.jb51.net');
$php_json
=
json_encode($json_arr);
?>
<script
type="text/javascript">
var
php_json
=
<?=$php_json?>;
</script>
<script
type="text/javascript">
function
php_json_dis(php_json)
{
alert(php_json.WebName);
alert(php_json.WebSite);
}
php_json_dis(php_json);
</script>
至此,PHP通過json_encode和json_decode函數對JSON格式數據進行轉換和解析的實例就介紹完了。
3. php和安卓怎麼實現數據(如json)交互
PHP是一種創建動態交互性站點的伺服器端腳本語言,優勢:PHP腳本語言應用廣泛,開源免費,最重要的是入門簡單,容易掌握。 PHP能夠生成動態頁面內容 PHP能夠創建、打開、讀取、寫入、刪除以及關閉伺服器上的文件 PHP能夠接收表單數據 PHP能夠發送並取回cookies PHP能夠添加、刪除、修改資料庫中的數據 PHP能夠限制用戶訪問網站中的某些頁面 能夠運行於各種平台,幾乎兼容所有WEB伺服器,支持多種資料庫 1.我們想要運行PHP,首先要有個web伺服器,一般可以在本地部署一個伺服器用來測試。所以需要下載個XAMPP,我們在網路搜索apache friends,直接打開第一個鏈接,然後毫不猶豫的下載最新版本(PHP7.0.9),下載後執行安裝。 2. 2.現在來配置XAMPP來部署一個本地伺服器,打開只需要啟用Apache服務,下面我就啟動成功了。如果啟用不成功,Port(s)沒有數據顯示,就證明你監聽的PC埠被佔用,你可以在Config的里第一個選項進行監聽埠的更改,找到記事本里的Listen 8080命令改後綴,這里我把監聽埠改成空閑的8080了。 3.下面來打開Dreamweaver建一個伺服器站點。站點配置:本地站點文件夾一定要選擇你裝Xampp路徑的htdocs的目錄里。 4.添加伺服器配置: 這樣站點就設置好了,然後在站點文件夾創建server.php,腳本如下 <?php //設置頁面內容是html編碼格式是utf-8 //header("Content-Type: text/plain;charset=utf-8"); header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:POST,GET'); header('Access-Control-Allow-Credentials:true'); header("Content-Type: application/json;charset=utf-8"); //header("Content-Type: text/xml;charset=utf-8"); //header("Content-Type: text/html;charset=utf-8"); //header("Content-Type: application/javascript;charset=utf-8"); //定義一個多維數組,包含員工的信息,每條員工信息為一個數組 $staff = array ( array("name" => "喬布斯", "number" => "101", "sex" => "男", "job" => "IOS開發工程師"), array("name" => "比爾蓋茨", "number" => "102", "sex" => "男", "job" => "微軟開發工程師"), array("name" => "陳美麗", "number" => "103", "sex" => "女", "job" => "安卓開發工程師"), array("name" => "黃力", "number" => "104", "sex" => "男", "job" => "Java開發工程師"), array("name" => "車神", "number" => "105", "sex" => "男", "job" => "游戲開發工程師"), array("name" => "測試貓", "number" => "106", "sex" => "男", "job" => "web前端開發工程師") ); //判斷如果是get請求,則進行搜索;如果是POST請求,則進行新建 //$_SERVER是一個超全局變數,在一個腳本的全部作用域中都可用,不用使用global關鍵字 //$_SERVER["REQUEST_METHOD"]返回訪問頁面使用的請求方法 if ($_SERVER["REQUEST_METHOD"] == "GET") { search(); } elseif ($_SERVER["REQUEST_METHOD"] == "POST"){ create(); } //通過員工編號搜索員工 function search(){ //檢查是否有員工編號的參數 //isset檢測變數是否設置;empty判斷值為否為空 //超全局變數 $_GET 和 $_POST 用於收集表單數據 if (!isset($_GET["number"]) empty($_GET["number"])) { echo '{"success":false,"msg":"參數錯誤"}'; return; } //函數之外聲明的變數擁有 Global 作用域,只能在函數以外進行訪問。 //global 關鍵詞用於訪問函數內的全局變數 global $staff; //獲取number參數 $number = $_GET["number"]; $result = '{"success":false,"msg":"沒有找到員工。"}'; //遍歷$staff多維數組,查找key值為number的員工是否存在,如果存在,則修改返回結果 foreach ($staff as $value) { if ($value["number"] == $number) { $result = '{"success":true,"msg":"找到員工:員工編號:' . $value["number"] . ',員工姓名:' . $value["name"] . ',員工性別:' . $value["sex"] . ',員工職位:' . $value["job"] . '"}'; break; } } echo $result; } //創建員工 function create(){ //判斷信息是否填寫完全 if (!isset($_POST["name"]) empty($_POST["name"]) !isset($_POST["number"]) empty($_POST["number"]) !isset($_POST["sex"]) empty($_POST["sex"]) !isset($_POST["job"]) empty($_POST["job"])) { echo '{"success":false,"msg":"參數錯誤,員工信息填寫不全"}'; return; } //TODO: 獲取POST表單數據並保存到資料庫 //提示保存成功 echo '{"success":true,"msg":"員工:' . $_POST["name"] . ' 信息保存成功!"}'; } ?> 我們可以在server.php文件數組$staff里的數據進行查詢,並且可以實現添加數據的功能,下面來創建demo.html <style> body,input,button,select,h1{ font-size:20px; line-height:18px; } </style> <script> window.onload=function(){ document.getElementById("search").onclick=function(){//查詢數據 //發送Ajax查詢請求並處理 var request=new XMLHttpRequest(); //open("方法(GET查詢,POST添加)","打開的文件數據",處理方式(同步為false非同步為true,不填默認為true)); request.open("GET","server.php?number="+document.getElementById('keyword').value); request.send(); request.onreadystatechange=function(){ if(request.readyState===4){//當伺服器請求完成 if(request.status===200){//status==200為伺服器請求成功 var data=JSON.parse(request.responseText); if(data.success){//數據填寫符合要求 document.getElementById('searchResult').innerHTML=data.msg; }else{//數據填寫不符號要求 document.getElementById('searchResult').innerHTML="出現錯誤:"+data.msg; } }else{//伺服器請求失敗 alert("發生錯誤:"+request.status); } } } } document.getElementById("save").onclick=function(){//添加數據 //發送Ajax添加數據請求並處理 var request=new XMLHttpRequest(); //open("方法(GET查詢,POST添加)","打開的文件數據",處理方式(同步為false非同步為true,不填默認為true));; request.open("POST","server.php"); //定義data取得用戶所填寫的數據,並且send(data)到伺服器 var data="name="+document.getElementById("staffName").value +"&number="+document.getElementById("staffNumber").value +"&sex="+document.getElementById("staffSex").value +"&job="+document.getElementById("staffJob").value; request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//在POST方法里必寫,否則添加數據不起作用 request.send(data); request.onreadystatechange=function(){ if(request.readyState===4){//當伺服器請求完成 if(request.status===200){//status==200為伺服器請求成功 var data=JSON.parse(request.responseText); if(data.success){//數據填寫符合要求 document.getElementById('createResult').innerHTML=data.msg; }else{//數據填寫不符合要求 document.getElementById('createResult').innerHTML="出現錯誤:"+data.msg; } }else{//伺服器請求失敗 alert("發生錯誤:"+request.status); } } } } } </script> <body> <h1>員工查詢</h1> <label>請輸入員工編號:</label> <input type="text" id="keyword"/> <button id="search">查詢</button> <p id="searchResult"></p> <h1>員工創建</h1> <label>請輸入員工姓名:</label> <input type="text" id="staffName"/><br> <label>請輸入員工編號:</label> <input type="text" id="staffNumber"/><br> <label>請輸入員工性別:</label> <select id="staffSex"> <option>男</option> <option>女</option> </select><br> <label>請輸入員工職位:</label> <input type="text" id="staffJob"/><br> <button id="save">保存</button> <p id="createResult"></p> </body> 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
4. jQuery和PHP的JSON交互,如何處理二維數組
引用
6
樓
mrshelly
的回復:jquery.json
插件.把jqGrid
數組處理成
json
串後.發送到伺服器伺服器接收(注意可能引號會轉義)後,
json_decode
即可.
加上
第二個參數.可以把數據強制轉化為
PHP
數組.先謝過樓上指點,我去試試看。
5. php怎麼接收json數據格式
PHP接收JSON格式的數據
在API服務中,目前流行採用json形式來交互。
給前端調用的介面輸出Json數據,這個比較簡單,只需要組織好數據,用json_encode($array) 轉化一下,前端就得到json格式的數據。
接收前端提交的json數據稍微復雜一點,原因是:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。因此,對型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之類的內容無法解析,如果用$_POST數組來接收就會失敗!
此時可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 來獲取提交的數據
查看手冊,可以發現$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的區別:
$_POST:通過 HTTP POST 方法傳遞的變數組成的數組,是自動全局變數。
$GLOBALS['HTTP_RAW_POST_DATA'] :總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。此變數僅在碰到未識別 MIME 類型的數據時產生。$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用。也就是說基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一樣的。但是如果post過來的數據不是PHP能夠識別的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。
6. Javascript生成JSON怎麼和PHP交互
js生成的json發到伺服器上後,php接到之後本質上是一個字元串,可以用json_decode,將其轉換為php變數,
反之,php可以將自己的array等編碼為json(json_encode),然後發送給前端js處理。
7. php怎樣使數據轉化為JSON格式與JS進行交互
$data=[];你的數據
$json=json_encode($data);
echo$json;//返回數據
js:
//發送請求獲取數據
varresponse='requestresult';
vardata=eval('('+response+')');//轉換為JSON對象
for(letvofdata){
//使用數據
console.log(v);
}
8. php怎麼接收json類型數據
PHP接收JSON格式的數據
在API服務中,目前流行採用json形式來交互。
給前端調用的介面輸出Json數據,這個比較簡單,只需要組織好數據,用json_encode($array) 轉化一下,前端就得到json格式的數據。
接收前端提交的json數據稍微復雜一點,原因是:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。因此,對型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之類的內容無法解析,如果用$_POST數組來接收就會失敗!
此時可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 來獲取提交的數據
查看手冊,可以發現$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的區別:
$_POST:通過 HTTP POST 方法傳遞的變數組成的數組,是自動全局變數。
$GLOBALS['HTTP_RAW_POST_DATA'] :總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。此變數僅在碰到未識別 MIME 類型的數據時產生。$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用。也就是說基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一樣的。但是如果post過來的數據不是PHP能夠識別的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。
補充說明:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。