注:JSONP只能解决GET请求的跨域问题,如果需要发送POST请求,还是老老实实通过后端来发送请求吧
使用JSONP最常见的错误就是:success_josnpCallback not defined,翻译过来就是运行成功时的回调函数没有定义。废话不多说,看代码:
$.ajax({
url:'url',
type:'GET',
dataType:'jsonp',
jsonp:"successCallback", //可以把回调函数名传递给服务端
jsonpCallback:"successCallback", //必须与服务端返回的包裹前缀一致
success: function (data) {
let str = JSON.stringify(data);
console.log(data);
}
})
问题我已经注释在JS代码中了,如果服务端返回的JSONP数据格式不符合前端规定的要求,那么就是出现上述错误。
这里我更推荐另一种写法:
$.getJSON('url?jsoncallback=?',function (data) {
console.log(data)
})
参数jsoncallback的含义就是回调函数名,服务端拿到前端传递的参数后用该参数包裹JSON数据使其变为JSONP格式的数据,这样前端就可以正常接收跨域请求返回的数据。使用 ? 会让jQuery自动生成字符串;也可以自己设定回调函数名,但最好每个回调函数名都不要相同,不然可能会出现错误。