关于AJAX跨域(与jQuery相关)

68 阅读1分钟
  • 跨域简单的来说限制了非同源(ip/域名/端口/协议)的数据交互,当然这肯定是极好的,因为如果不限制那么你的网页别人也可以操作是不是很恐怖

  • 但是有些情况下我们需要调用别人的服务器数据,而且别人也愿意怎么办呢,程序员是很聪明的,html标签中img,script,link等一些带有src属性的标签是可以请求外部资源的,img和link得到的数据是不可用的,只有script标签请求的数据我们可以通过函数来接收,函数的参数传递可以是任何类型,所以创建一个函数,来接收,参数就是请求到的数据,而对方的数据也要用该函数来调用就可以实现跨域了

  • 简单封装jsonp实现

// url是请求的接口
// params是传递的参数
// fn是回调函数
function jsonp(url, params, fn){
			// cbName实现给url加上哈希,防止同一个地址请求出现缓存
            var cbName = `jsonp_${(Math.random() * Math.random()).toString().substr(2)}`;
            window[cbName] = function (data) {
                fn(data);
                // 获取数据后移除script标签
                window.document.body.removeChild(scriptElement);
            };

            // 组合最终请求的url地址
            var querystring = '';
            for (var key in params) {
                querystring += `${key}=${params[key]}&`;
            }
            // 告诉服务端我的回调叫什么
            querystring += `callback=${cbName}`;

            url = `${url}?${querystring}`;

            // 创建一个script标签,并将src设置为url地址
            var scriptElement = window.document.createElement('script');
            scriptElement.src = url;
            // appendChild(执行)
            window.document.body.appendChild(scriptElement);
        }