400-800-9385
网站建设资讯详细

PHP网站制作之curl来模拟ajax来发送数据

发表日期:2021-02-17 22:23:27   作者来源:刘红旺   浏览:2272   标签:PHP网站制作    
ajax不管是post还是get传递数据的时候是什么样的形式传递数据呢?
如果我们用curl来模拟ajax来发送数据时候,我们构造的$data应该是怎样才是标准的呢?
1、首先最容易想到的是数组结果如$data=array('a'=>1,'b'=>2);
2、还会想到json数据格式如$data=json_encode(array('a'=>1,'b'=>2));
这上面的两个方式在接收端作了限制后都是不正确的。(大多数数据接口的方式);
标准的传递数据格式是:a=1&b=2
1.接收数据流
  function getRawData(){
        $put = array();
        parse_str(file_get_contents('php://input'), $put);
        return $put;
    }
 
  //实用函数
/* 获取与发送数据
 * $url 获取路地址
 * $postData传递数据数组形式
 * $isDebug 是否调试打印发送地址和发送数组
 * return 返回如果是字符则是字串,json格式则返回数组
*/
function curlHttp($url,$postData,$isDebug=false){
    $url=strstr($url,'http:')?$url:C('HTTPURL').$url;
    if($isDebug){dump($url);dump($postData);}//调试则输出发送的地址和发送的数据串
    $ch=curl_init();// 初始化
    //$header = array('Expect:');
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($ch, CURLOPT_HEADER, 0);//是否取得头信息
    curl_setopt($ch, CURLOPT_POST, true);//post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));//http_build_query自动构造url发送信息
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);//20秒连接超时
    //curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $data=curl_exec($ch);
    $toArray=json_decode($data,true);
    if(is_array($toArray)){
        $data=listToArray($toArray);
    }
    return $data;
}
/* 对curlHttp返回的list一维数组的如果含json串转为深度转换数组
 * $data一维数组,键值含有json字符串
 * return 返回一个标准的数组
 * */
function listToArray($data){
    $arr=array();
    foreach($data as $k=>$v){
        if(is_json($v)){
            $arr[$k]=listToArray(json_decode($v,true));
        }elseif(is_array($v)){
            $arr[$k]=listToArray($v);
        }else{
            $arr[$k]=$v;
        }
    }
    return $arr;
}
/* 判断数据是否为json数据 备注:json_decode对于数组和数字也会判定为json数据需要加上{的判定
 * $string字符串
 * return 返回true or false
 * */
function is_json($string) {
    $isjsonf=json_decode($string);
    $isjsont=strstr($string,'{');
    return ($isjsonf && $isjsont)?true:false;
}
 
前端ajax获取数据
 

代码


 
<script>
$.ajax({
    url:"api接口地址",
    type:'POST',//参数方式
    dataType: "json",//数据类型
    data:{"action":1,"OrderID":"112-2316089-0269002","MD5Key": "55E9D105D116DBEC3E8285EB0F5C6404"'},
    success:function (val) {
        console.log(val);
    },error:function(){
        alert('error');
    }
})
 
如没特殊注明,文章均为方维网络原创,转载请注明来自https://www.szfangwei.cn/news/5977.html