如何在javascript和php中使用ajax通信傳遞JSON-創(chuàng)新互聯(lián)

這篇文章給大家介紹如何在javascript和php中使用ajax通信傳遞JSON,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元浦江做網(wǎng)站,已為上家服務(wù),為浦江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
{
 "bookid": "558a6be36c72a" , 
 "resitems": [
  {
   "res_id": "558a6bff6bd55",
   "res_name": "IMG_8421.jpg",
   "src_origin": "558a6bff6bd55.jpg",
   "src_hd": "558a6bff6bd55_hd_1920_1280.jpg",
   "src_sd": "558a6bff6bd55_sd_1024_682.jpg",
   "src_td": "558a6bff6bd55_td_300_200.jpg"
  },
  {
   "res_id": "558a6c4a716a2",
   "res_name": "IMG_8477.jpg",
   "src_origin": "558a6c4a716a2.jpg",
   "src_hd": "558a6c4a716a2_hd_1920_1280.jpg",
   "src_sd": "558a6c4a716a2_sd_1024_682.jpg",
   "src_td": "558a6c4a716a2_td_300_200.jpg"
  }
 ]
 
}

ajax:

首先要熟悉ajax的用法,它是連接瀏覽器和服務(wù)器的橋梁。

一般用法如下:

$.ajax({
  type:"POST",
  url:"SQLHelper.php",
  dataType:'json',
  async:false,
  data:{'json':jsonStr}
  });

其中type的類型可以是GET和POST,url是服務(wù)器處理的腳本程序。dataType類型有text,json,xml等等,async通常使用false,data是具體要傳遞的json字符串,并且給服務(wù)器post一個(gè)叫做json字段的數(shù)據(jù),PHP端可以$_POST['json']就可以獲取post過來的數(shù)據(jù)。如果需要接收返回?cái)?shù)據(jù),

 var req= $.ajax({
  type:"POST",
  url:"SQLHelper.php",
  dataType:'json',
  async:false,
  data:{'json':jsonStr}
  });
var response=req.responseText;

上面使用ajax實(shí)現(xiàn)了一次普通的客戶端到服務(wù)器的一次數(shù)據(jù)傳遞。下面的問題是怎么去獲得上面的jsonStr呢?像開篇提及的那種json字符串怎么才能生成的問題 附:如果遇到含有中文的url 如下操作:

location=encodeURI('content_p.html?id='+catalogid+'&title='+bookTitle+'&thumb='+bookThumb);

JavaScript->PHP:

使用js數(shù)組來完成json對象的封裝:

var arrX={resitems:[]};
  arrX.bookid=bookid;
  for (var i=0; i < cellList.length; i++) {
   var item=cellList[i];
   var jsonRes={};
   jsonRes.bookid=bookid;
   jsonRes.res_id=item.itemStruct.id;
   jsonRes.res_name=item.itemStruct.name;
   jsonRes.src_origin=item.itemStruct.src;
  jsonRes.src_hd=item.itemStruct.src_hd;
  jsonRes.src_sd=item.itemStruct.src_sd;
  jsonRes.src_td=item.itemStruct.src_td;
  arrX.resitems.push(jsonRes);
 };
 
 var jsonResStr=JSON.stringify(arrX);

上面的代碼是先創(chuàng)建arrX的json對象,對對象添加各種屬性、變量等。最后通過stringify轉(zhuǎn)化為字符串,這個(gè)獲得的字符串jsonResStr就是一個(gè)普通字符串了,可以通過ajax傳遞到服務(wù)器了,值得注意的是,這里如果有中文,那是沒問題的,不會(huì)出現(xiàn)亂碼問題。在完成了JOSN封裝之后,開始使用ajax傳遞到PHP頁面

  $.ajax({
   type:"POST",
   url:"SQLHelper.php",
   dataType:"json",
   async:false,
   data:{'jsonResPanel':jsonResStr},
   success:function(json){}
  });

php對接收到的json數(shù)據(jù)解析并且寫入到數(shù)據(jù)庫:

if (isset($_POST['jsonResPanel'])) {
  $data=$_POST['jsonResPanel'];
  $arr=(array)(json_decode($data));
  $items=(array)($arr['resitems']);
  $bookid=$arr['bookid'];
  $sql="";
  for ($i=0; $i < count($items); $i++) { 
   $value=(array)($items[$i]);
   $bookid=$value['bookid'];
   $res_id=$value['res_id'];
   $res_name=$value['res_name'];
   $src_origin=$value['src_origin'];
   $src_hd=$value['src_hd'];
   $src_sd=$value['src_sd'];
   $src_td=$value['src_td'];
   $sql.="insert into resourcesheet(bookid,res_id,res_name,src_origin,src_hd,src_sd,src_td)values
   ('{$bookid}','{$res_id}','{$res_name}','{$src_origin}','{$src_hd}','{$src_sd}','{$src_td}');";
  }
  $sqli=new SQLHelper('ugumanage');
  //先刪除bookid下所有資源
  $sqlDelete="delete from resourcesheet where bookid='{$bookid}'";
  $sqli->execute_dml($sqlDelete);
  $sqli->multi_execute_dml($sql);
  $sqli->close_connect();
 }

需要注意的是第三號(hào)在拿到j(luò)son字符串之后便使用json_decode函數(shù)解析成對象,這個(gè)時(shí)候只是一個(gè)普通php對象,無法給我提供有效信息,需要將它強(qiáng)制轉(zhuǎn)換為數(shù)組array即可變?yōu)槲覀兪煜さ膒hp數(shù)組,在拿到信息的數(shù)組之后,我們便可以像操作普通php數(shù)組那樣提取json傳遞過來的所有信息了,上面代碼將json的部分信息添加到數(shù)據(jù)庫的一張表里邊,當(dāng)然如果傳遞的json字符串過長,建議使用GZip在客戶端對字符串壓縮之后再傳遞,接收端解壓縮即可。

PHP->JavaScript:

如果客戶端需要查詢數(shù)據(jù)庫的數(shù)據(jù),必然需要要求服務(wù)器查詢,由php將查詢結(jié)果通過json返回給客戶端。

首先客戶端通過ajax發(fā)送查詢請求給php

var request=$.ajax({url:'SQLHelper.php?loadResPanel='+bookid,async:false});
var jsonStr=request.responseText;

第二行表示得到了查詢結(jié)果,下面來看看在php端是怎么生成這個(gè)結(jié)果并返回的。

if (isset($_REQUEST['loadResPanel'])) {
  $bookid=$_REQUEST['loadResPanel'];
  $sqli=new SQLHelper('ugumanage');
  $arr=array();
  $arrItems=array();
  $arrInfo=array();
  $head=urlencode("http://{$_SERVER['HTTP_HOST']}/cloud/"); 
  $sql0="select *from contentsheet where bookid='{$bookid}'";
  $res0=$sqli->execute_dql($sql0);
  while ($row0=$res0->fetch_assoc()) {
   $catalogid=$row0['catalogid'];
   $bookid=$row0['bookid'];
   $title=urlencode($row0['title']);
  }
  $sql1="select *from resourcesheet where bookid='{$bookid}'";
  $res1=$sqli->execute_dql($sql1);
  while ($row1=$res1->fetch_assoc()) {
   $item=array('bookid'=>$row1["bookid"],'res_id'=>$row1['res_id'],'res_name'=>urlencode($row1["res_name"]),
   'src_origin'=>$row1["src_origin"],'src_hd'=>$row1["src_hd"],'src_sd'=>$row1["src_sd"],'src_td'=>$row1["src_td"]);
   array_push($arrItems,$item);
  }


  $arrInfo['head']=$head;
  $arrInfo['catalogid']=$catalogid;
  $arrInfo['bookid']=$bookid;
  $arrInfo['title']=$title;
  $arr['info']=$arrInfo;
  $arr['items']=$arrItems;
  $json=urldecode(json_encode($arr)) ;
  echo $json;
  $sqli->close_connect();
 }

值得注意的是第七行這種,遇到特殊符號(hào)或者中文字符,在php端需要將它們統(tǒng)一轉(zhuǎn)碼,具體轉(zhuǎn)成了什么,我們不用關(guān)心,只需要知道在外面套一個(gè)urlencode函數(shù)就可以了。創(chuàng)建json同樣是使用數(shù)組,編制好數(shù)組之后,通過json_encode可以直接將其轉(zhuǎn)化為json字符串。這里在返回給客戶端之前,仍然需要再使用urldecode解碼,這樣傳遞出來的json字符串才不會(huì)有亂碼現(xiàn)象。

客戶端接收到j(luò)son字符串后同樣需要對它進(jìn)行解析成javascript對象。

var request=$.ajax({url:'SQLHelper.php?loadResPanel='+bookid,async:false});
 var jsonStr=request.responseText;

 var jsonObj=JSON.parse(jsonStr);
 var info=jsonObj.info;
 var items=jsonObj.items;

 document.getElementById('textBox').value=info.title;
 for (var i=0; i < items.length; i++) {
   var item=new UploadItemStruct();
  item.id=items[i].res_id;
  item.head=info.head;
  item.name=items[i].res_name;
  // item.type=$(this).attr('type');
  item.src=items[i].src_origin;
  item.src_hd=items[i].src_hd;
  item.src_sd=items[i].src_sd;
  item.src_td=items[i].src_td;
  addCellSubThree(document.getElementById("divPanel"),item); 
 };
JavaScript的特點(diǎn)

1.JavaScript主要用來向HTML頁面添加交互行為。 2.JavaScript可以直接嵌入到HTML頁面,但寫成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。 3.JavaScript具有跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行。

關(guān)于如何在javascript和php中使用ajax通信傳遞JSON就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁題目:如何在javascript和php中使用ajax通信傳遞JSON-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://m.kartarina.com/article26/cdscjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司搜索引擎優(yōu)化網(wǎng)站內(nèi)鏈App開發(fā)關(guān)鍵詞優(yōu)化服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
主站蜘蛛池模板: 国模无码视频一区二区三区| 性色AV蜜臀AV人妻无码| 免费无码肉片在线观看| 亚洲AV无码专区国产乱码不卡| 亚洲精品无码久久久久A片苍井空| 亚洲欧洲AV无码专区| 精品亚洲成α人无码成α在线观看 | 国产成人无码免费看视频软件| 国产精品亚洲专区无码唯爱网| 惠民福利中文字幕人妻无码乱精品| 蜜桃臀无码内射一区二区三区| yy111111少妇影院无码| 无码人妻丝袜在线视频| 亚洲AV无码1区2区久久| 精品久久久无码中文字幕边打电话| 永久免费av无码入口国语片| 国产精品无码久久久久久久久久 | 亚洲av无码一区二区乱子伦as| 免费A级毛片无码无遮挡内射| 久久亚洲精品AB无码播放| 国产高清无码二区| av无码aV天天aV天天爽| 精品无码综合一区二区三区| 日韩免费人妻AV无码专区蜜桃| 精品人体无码一区二区三区| 毛片亚洲AV无码精品国产午夜| AV无码久久久久不卡网站下载| 亚洲av无码专区国产乱码在线观看| 国产精品无码一二区免费 | 无码视频免费一区二三区| 6080YYY午夜理论片中无码| 久久久久久国产精品免费无码| 亚洲Aⅴ无码专区在线观看q| 中文无码vs无码人妻| 四虎影视无码永久免费| 久久午夜无码鲁丝片午夜精品| 少妇无码?V无码专区在线观看 | 国产精品无码久久久久久久久久| 亚洲AV成人无码网天堂| 无码人妻aⅴ一区二区三区有奶水| 全免费a级毛片免费看无码|