您现在的位置
PHP网站制作之curl来模仿ajax来发送数据
2022-03-05 高端做网站公司

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得到数据