跨域 jsonp
//简述
[定义]
1. 基于浏览器的安全考虑,由于同源策略的限制,不同域名、不同端口、不同协议的对象不能互相调用。
(其实浏览器成功发送请求并拿回了数据 只是浏览器的同源策略 禁止了获取 )
2.App请求接口类似于C/S不存在跨域问题。
[表现:]
同源策略限制了一下行为:
1.Cookie、LocalStorage 和 IndexDB 无法读取
2.DOM 和 JS 对象无法获取
3.Ajax请求发送不出去
//前端
//传递参数
var vin='lgbh12e08fy367896';
//自定义的jsonp回调函数
window.testCallBack = function(data){
//处理回调
}
$("#getcarinfo").click(function(){
$.ajax({
type: "get",
async: false,
url: "http://www.runoob.com/try/ajax/jsonp.php", //示例demo的PHP环境接口
//可以带参数传到后台
//url: "http://wenhao2018.hello2game.com/game/getDailei?bundleid=id.id.id&companycode=doctordai",
data: { vin: vin },
dataType: "jsonp",
jsonp: "jsoncallback", //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
//自定义回调
//jsonpCallback: "testCallBack", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
success: function (json) { //在此之前若没有定义回调函数success_jsonpCallback2则执行下面的代码
alert(json[0]);
},
error: function () {
alert('fail');
}
});
});
//后端
<?php
header('Content-type: application/json');
//获取回调函数名
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
//json数据
$json_data = '["customername1","customername2"]';
//输出jsonp格式的数据
echo $jsoncallback . "(" . $json_data . ")";
?>