jsonp的跨域请求

jsonp的跨域请求原始方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
              function jp(data){
				  console.log(data);
			  }
		</script>
		
		<script src="https://wis.qq.com/weather/common?weather_type=observe|forecast_24h|air&source=pc&province=%E6%B2%B3%E5%8D%97&city=%E9%83%91%E5%B7%9E%E5%B8%82&callback=jp" type="text/javascript" charset="utf-8"></script>
	</body>
</html>


jsonp的封装

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>jsonp 方法封装</title>
	</head>
	<body>
		<script type="text/javascript">
			//目标
			/* jsop().then()*/
			//传入参数:url 函数名称jp  callback 传入后端参数

			function jsonp(url, option = {
				callback: "callback",
				jp: "jp"
			}) {

				var callback = option.callback || 'callback'; //传给后端get的参数
				var jp = option.jp || 'jp'; //传给后端的callback值
				url = url + `&${callback}=${jp}`; //url添加 &callback=jp
				//动态创建一个script标签
				var script = document.createElement("script");
				//指定script的src值
				script.src = url;
				//插入script标签到header
				var head = document.querySelector("head");
				head.append(script);

				return new Promise((resolve, reject) => {
					//创建一个函数,函数名与jp保持一致
					window[jp] = data => {
						resolve(data);
					}

					script.onload = function() {
						head.removeChild(script);
					}
					script.onerror = function(e) {
						head.removeChild(script);
						reject(e);
					}

				})
			}



			var url =
				"https://wis.qq.com/weather/common?weather_type=observe|forecast_24h|air&source=pc&province=%E6%B2%B3%E5%8D%97&city=%E9%83%91%E5%B7%9E%E5%B8%82";
			jsonp(url).then(res => {
				console.log(res);
			}).catch(err => {
				console.log(err)
			})
		</script>



	</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_40994735/article/details/108237127
今日推荐