ajax 请求外域,AJAX 跨域问题

关于 AJAX 的介绍和使用我之前写过,这里就不写了。如果要了解 AJAX 可以访问下面两篇文章:

因为浏览器同源策略的限制,一个网站的 AJAX 是不能请求另一个网站的内容的。这里说的另一个网站就是 域名 或 端口号 不相同的网站,比如 我的网站域名是 a.com ,我就不能通过 AJAX 请求 b.com 的内容。

直接跨域请求

下面是一个简单的 AJAX 请求,我的域名是 localhost,我要请求 https://www.misterma.com/ajax.php:let url = 'https://www.misterma.com/ajax.php?test=123';

let xhr = new XMLHttpRequest();

xhr.open('get', url, true);

xhr.send();

xhr.onreadystatechange = () => {

if (xhr.readyState == 4) {

if (xhr.status == 200) {

console.log(xhr.responseText); // 在控制台输出请求到的内容

}else {

console.log(xhr.status); // 在控制台输出 HTTP 状态码

}

}

}

浏览器控制台出现了如下的提示:Access to XMLHttpRequest at 'https://www.misterma.com/ajax.php?test=123' from origin 'http://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

XHR 2

XHR 2 全称为 XMLHttpRequest Level 2, 是 XMLHttpRequest 的升级版,其中就加入了跨域请求的功能。不过只有支持 HTML 5 的浏览器才能使用,IE 至少需要 IE 10。

如果要使用 XHR 2 的跨域请求还必须要拥有服务器端的控制权,也就是说 如果你想请求其他人的网站是不可以的。服务器端 header 需要输出 Access-Control-Allow-Origin:* 和 Access-Control-Allow-Methods:POST,GET 。

其中 Access-Control-Allow-Origin:* 中的 * 就是允许所有外域访问,如果要设置允许访问的域名可以这样写:Access-Control-Allow-Origin:http://a.com,其中的 http://a.com 就是允许访问的域名。

Access-Control-Allow-Methods:POST,GET 中的 POST 和 GET 就是允许的请求方式。

下面还是在 localhost 给 https://www.misterma.com/ajax.php 发送 AJAX 请求,JS 代码还是和上面的一样,服务器端 PHP 代码如下:<?php

header('Access-Control-Allow-Origin:*');

header('Access-Control-Allow-Methods:POST,GET');

// 判断是否有参数为 test 的 get 请求

if (isset($_GET['test'])) {

echo $_GET['test']; // 输出前端发送的内容

}

控制台成功的输出了 123 。

以上就是跨域请求最简单的方式。除了上面写的方式外也可以通过 JSONP 来请求,不过 JSONP 只能实现 get 请求,而且同样需要后端的配合。关于 JSONP 请求以后有时间再写一篇。

版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。

如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值