1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PHP-Ajax跨域解决方案

PHP-Ajax跨域解决方案

时间:2022-06-25 07:59:22

相关推荐

PHP-Ajax跨域解决方案

1.先了解下Ajax跨域问题:

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/1999/REC-html401-19991224/loose.dtd"> 2 <html xmlns="/1999/xhtml"> 3<head> 4 <title>AJAX跨域验证</title> 5 <script> 6 var xmlHttp; 7 function createXMLHttpRequest() { 8 if (window.ActiveXObject) { 9 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");10 }11 else if (window.XMLHttpRequest) {12 xmlHttp = new XMLHttpRequest();13 }14 }15 16 function hello() {17 var url = ''; 18 createXMLHttpRequest();19 xmlHttp.onreadystatechange = showResponse;20 xmlHttp.open("GET", url, true);21 xmlHttp.send(null);22 }23 24 function showResponse(){25 if(xmlHttp.readyState == 4) {26 if(xmlHttp.status == 200) { 27 document.getElementById("result").setAttribute("value",xmlHttp.responseText) ;28 }29 }30 }31 </script>32</head>33<body> 34 <input type="button" value="hello" onclick="hello()"><br/><br/>35 <textarea id="result" name="result" cols=100 rows=100 ></textarea>36</body>37 </html>

如果以上代码放到Apache服务器下, 访问的话不会得到任何结果, 也就是说Ajax只能访问本站的资源。

那为什么限制Ajax跨域呢?

安全!如果能跨域访问的话, 想想CSRF攻击!

解决方案:

1.建立中间层;

用Ajax访问本站, 本站PHP利用file_get_contents()或CURL等工具去请求指定URL并返回想要结果

2.利用jQuery的一些Ajax访问方法, 比如$.ajax(), jQuery.getScript(), $.getJson等

3.直接改变script标签的src属性, 而src属性对应的URL返回设置的值(比如返回'var param="abcd";', 则页面可以直接调用param变量)

4.由于src属性(比如script、img、iframe)都拥有跨域的能力, 所以可以利用jsonp(可以认为是一种方式, 利用src), 虽然jQuery把jsonp归入ajax, 但他们真不是一回事儿, ajax的核心是通过XmlHttpRequest获取非本页内容, 而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。