关键词搜索

源码搜索 ×
×

Web笔记-使用jsonp解决跨域请求(CROS)问题

发布2019-10-04浏览4454次

详情内容

目录

 

 

基本概念

代码与实例


 

基本概念

当我在某web站点,这个站点里面发出了像其他站点的请求(不同链接,或者同一链接的不同端口),是会失败的,因为是浏览器的安全检测问题,当然,这个只是主流浏览器的功能,如果开发者自己开发的浏览器那么CROS就看开发者自己怎么处理了,这里以Chorm浏览器为例。

这里安装插件,允许跨站即可:

Allow-Control-Allow-Origin: *

这样就可以解决跨域的问题,但是还有一种方式,那就是jsonp,这个主要是在script中,发起请求,这样浏览器是不会连接的(百度的搜索引擎下拉关键字,QQ英语等都是用了这样的技术),下面来演示下。

 

代码与实例

这里这C/C++里面的回调差不多。写一个URL,指定一个函数,即可进行回调,如下代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <script>
  9. function getData(data){
  10. console.log(data);
  11. }
  12. var script = document.createElement("script");
  13. //script.id = 'jsonp';
  14. script.src = './jsonp.js';
  15. document.body.appendChild(script);
  16. </script>
  17. </body>
  18. </html>

这里来看看jsonp.js文件:

  1. getData({
  2. name: '呵呵哒',
  3. value1: '呵呵'
  4. })

程序运行截图如下:

下面是百度的下拉框首先来分析下:

这里的wd就是只就是浏览器输入的,看看里面的内容:

看看源码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
  7. </head>
  8. <body>
  9. <input type="text" />
  10. <ul></ul>
  11. <script>
  12. function getData(data){
  13. console.log(data);
  14. var script = document.querySelector('#jsonp');
  15. $('ul').html('');
  16. for(var i = 0; i < data.g.length; i++){
  17. $('<li>' + data.g[i].q + '</li>').appendTo('ul');
  18. }
  19. }
  20. function getList(wd){
  21. var script = document.createElement("script");
  22. script.id = 'jsonp';
  23. script.src = 'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=1430,21123,29523,29721,29567,29220&req=2&csor=5&pwd=123&cb=getData&wd=' + wd;
  24. document.body.appendChild(script);
  25. }
  26. $('input').keyup(function(){
  27. var wd = $(this).val();
  28. getList(wd);
  29. })
  30. </script>
  31. </body>
  32. </html>

这里cb指向自己的函数,到时候就会调用!

程序运行截图如下:

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载