@Chiang
2020-08-09T10:43:08.000000Z
字数 1931
阅读 563
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项目中遇到的问题去看框架方法是如何实现的,这可能不是最优方案,但是这是最准确的方案