博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js通过ajax和thinkPHP交换数据
阅读量:4364 次
发布时间:2019-06-07

本文共 3028 字,大约阅读时间需要 10 分钟。

php.net上的文档,$json是个json格式的字符串,通过json_decode()得到的是php变量/对象

 

$data= json_decode(urldecode(I('data')),TRUE);$data_arr=object_array($data);    //object_array()是functionecho $data_arr['title_header'];

public function object_array($array){

if(is_object($array))
{
$array = (array)$array;
}
if(is_array($array))
{
foreach($array as $key=>$value)
{
$array[$key] = $this->object_array($value);
}
}
return $array;
}//转换成数组

//thinkphp 里的代码

urldecode()得到的是json格式字符串,json_decode()得到的是json数组或者对象,第二个参数true代表转换成数组,把它强制生成PHP关联数组.,false代表转换成对象

 

jquery:

简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax

jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求

 

where($data)->getField('title');//,from,content1,category,is_top,create_at $arr['from'] = "xxxx"; $arr['content'] = "xxxx"; $arr['category'] = "xxxx"; $arr['is_top'] ="xxxx"; $arr['create_at'] ="xxxx"; echo json_encode($arr);?> //php

$.post(

"{:U('modify')}?id="+id,
function(data){
  data = eval("(" + data + ")");//eval():字符串->对象

  console.log(data);  // output:  Object {

title: "GGGGG", from: "GGG"}

  //title,from是对象的属性                                

  var title = data.title;  //string

  var from  = data.from;  //string

});

  /*

 var show_to_modify = JSON.stringify(data);//jsonObj->json字符串      console.log(show_to_modify);  // output:{"title":"GGGGG","from":"GGG"}   show_tom_modify.title=>undefined

  var jsonStr1 = show_to_modify.split("{")[1];

  var jsonStr2 = jsonStr1.split("}")[0];
  console.log(jsonStr2.split(",").length);  //2
  var str = jsonStr2.split(",");
  var jsonStr3 = str[0];
  var show_header = jsonStr3.split(":")[1];  //undefined
  var jsonStr4 = str[1];
  var show_from = jsonStr4.split(":")[1];    //undefined

*/ 

 

php里接收js $.ajax()的json数据的时候,函数里用的是header("Content-Type:application/json;charset=utf-8");

而不能用header("Content-Type:text/html;charset=utf-8");

因为你要告诉客户端,该以什么方式来接受/解析数据,你是打出json的,就应该跟客户端说,这不是text/html, 而不是 application/json.

也就是说php回传json的时候,特别是有中文时要加header("Content-Type:application/json;charset=utf-8");这句。

 

 

关于json的:

 

$a = array( 'Jack' , 'Sam' , 'Tom' );    echo json_encode( $a );

 

当 JavaScript 请求到上面的代码,PHP 将解析数组 $a 为 json 字符串并返回到前端,但事实上在前端拿到的返回结果却是一个数组。

 

[ "Jack" ,  "Sam" ,  "Tom" ]

 

这个结果对于前端来说也许并不是所期望的,对于 JavaScript 来说,数组和 json 的关系非常密切,甚至可以简单地把 json 理解为关联数组,但这并不意味着二者可以划等号,比如 json 没有 length 属性,也不能进行数字索引,json 是键值对,而 JavaScript 的数组严格说来是没有"键"的,这和 PHP 的差异比较大。那么为什么 json_encode 的返回结果是数组呢?

 

本文开头的 PHP 代码中的数组是严格意义上的数字索引数组,json_encode 方法在处理这样的数组的时候会返回数组字符串,它需要同时满足两个条件:1. 数字索引数组,2. 索引值从 0 开始。这意味着下面的代码也会返回同样的结果:

 

$b = array(        '0' => 'Jack',        '1' => 'Sam',        '2' => 'Tom'    );    echo json_encode( $b );

 

这两个条件的任意一个没有获得满足,那么 json_encode 方法才真正的返回 json 字符串:

 

$c = array(        'person-1' => 'Jack',        'person-2' => 'Sam',        'person-3' => 'Tom'    );    echo json_encode( $c );

 

这时前端得到的结果如下:

 

{        'person-1' : 'Jack',        'person-2' : 'Sam',        'person-3' : 'Tom'    };

 

转载于:https://www.cnblogs.com/tangwaikei/articles/4435281.html

你可能感兴趣的文章
python实现mapreduce(1)——模拟MR过程
查看>>
APACHE2 服务器配置 (一)
查看>>
JAVA JVM 流程一
查看>>
Jquery的普通事件和on的委托事件
查看>>
IE低版本兼容的感悟
查看>>
ACE网络编程笔记(2):IPC SAP、ACE_SOCKET和TCP/IP通信实例
查看>>
关于递归
查看>>
数据库水平分表(一个大数据量的表)
查看>>
【皇甫】☀七个小矮人和一个小博
查看>>
android 省市区三级联动
查看>>
推荐一个好用的免费简历word模板
查看>>
MySQL中的查询子句
查看>>
『重构--改善既有代码的设计』读书笔记----代码坏味道【4】
查看>>
Java开发者值得关注的7款新工具
查看>>
Spring Boot + Jersey
查看>>
Web前端学习的路径分享,前端学习方法及途径
查看>>
贪吃蛇小游戏
查看>>
USE PDFCREATE TO CREATE A PDF FILE
查看>>
第八章 watch监听 84 watch-监视路由地址的改变
查看>>
IDEA tomcat乱码
查看>>