@Chiang
2020-08-09T02:43:08.000000Z
字数 1931
阅读 882
2020-08 工作总结
这里说明下我在
doitphp框架下直接调用的self:getParams('param')方法
var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象httpRequest.open('POST', 'url', true); //第二步:打开连接/***发送json格式文件必须设置请求头 ;如下 - */httpRequest.setRequestHeader("Content-type","application/json");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)var obj = { name: 'zhansgan', age: 18 };httpRequest.send(JSON.stringify(obj));//发送请求 将json写入send中/*** 获取数据后的处理程序*/httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功var json = httpRequest.responseText;//获取到服务端返回的数据console.log(json);}};
传过来的json数组样式范例:
[{"name":"zhansgan","age","18"},{"name":"zhansgan","age","18"}]$regionsReqs = self:getParams('regionsReqs');$regionsReqsJson = json_decode($regionsReqs,true);
哈哈这样居然解析不了,一脸蒙圈...
JavaScript如果直接传对象数组过来的话是这样的,也不对
[object, object]
查看下框架
getParams方法的实现原理
/*** 获取并分析$_GET或$_POST全局超级变量数组某参数的值** 获取并分析$_POST['参数']的值 ,当$_POST['参数']不存在或为空时,再获取$_GET['参数']的值** @access public** @param string $key 所要获取的参数名称* @param mixed $default 默认参数, 注:只有$string不为数组时有效* @param boolean $isEncode 是否对符串进行htmlspecialchars()转码(true:是/ false:否)** @return mixed*/public static function getParams($key = null, $default = null, $isEncode = true) {//参数分析if (!$key) {return self::_params($isEncode);}$params = self::post($key, null, $isEncode);//当$_POST[$key]值为空时return (!is_null($params)) ? $params : self::get($key, $default, $isEncode);}
@param boolean $isEncode 是否对符串进行htmlspecialchars()转码(true:是/ false:否)
这段注释解释了原因,对接收的数据框架方法默认进行了htmlspecialchars(将特殊字符转换为 HTML 实体)
- 方案1 方法调用传相关参数取消实体转换
$regionsReqs = self:getParams('regionsReqs', false);
- 方案2 把框架方法接收到的数据再转义回来
$regionsReqs = self:getParams('regionsReqs');$regionsReqs = htmlspecialchars_decode($regionsReqs);$regionsReqsJson = json_decode($regionsReqs,true);
这里主要就是两个函数的相互解析的问题
htmlspecialchars
htmlspecialchars_decode项目中遇到的问题去看框架方法是如何实现的,这可能不是最优方案,但是这是最准确的方案
