如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也同样支持jsonp的数据方式调用。下面演示关于jQuery处理跨域请求ajax的方式:
服务器端(PHP为例):
' 张三','age'=>22,'city'=>'newYork');sleep(3); //人为设置一个等待(用于观察什么是ajax的同步与异步)responseAJAX($data); //响应请求返回数据/** * 返回处理后的ajax请求数据 * @author martinzhang * @param $data 待返回的数据 * @return none */function responseAJAX($data){ $data = json_encode($data); $getCallBackName = $_REQUEST['callback']; //获取callback调用的function函数名 if($getCallBackName != ''){ //使用了jsonp跨域请求 $data = $getCallBackName.'('.$data.')'; //返回格式形如:callbackFunName({"name":" \u5f20\u4e09","age":22,"city":"newYork"}) die($data); }else{ //未跨域 die($data); } }
jsonp跨域