zoukankan      html  css  js  c++  java
  • 解决js跨域问题

    前后端分离项目经常会遇到跨域问题,通常有两种方法去解决这个问题。

    第一种,就是利用html5新的api跨源资源共享。

    这时你可以让你的后端同事设置一个响应头如下,允许你直接请求资源,就OK了

    1 Access-Control-Allow-Origin: http://www.xxx.net

    红字部分就是你的前端域名,这样后端收到请求后,就会直接返回数据给你,这没什么好说的,直接看第二种。

     第二种,就是利用jsonp实现跨域。

    这是后端代码,基于express

     1 const express = require('express');
     2 
     3 const router = express.Router();
     4 
     5 router.get('/', (req, res) => {
     6     if (req.query && req.query.callback) {
     7         res.jsonp({status: 200, message: "这是一个jsonp接口", data: [{name:111,age:222}]});
     8     } else {
     9         res.json({status: 200, message: "这是一个json接口", data: [{}]});
    10     }
    11 });
    12 
    13 module.exports = router;

    前端代码如下:

    如果你的项目使用了jquery库,你可以直接使用他内置的ajax方法,里面封装好了跨域操作api,如下:

     1 function get_jsonp() {
     2 $.ajax({
     3     url: '/api',
     4     type: 'get',
     5     dataType: 'jsonp',  // 预期服务器返回的数据类型
     6     jsonp: 'callback',  // 指定回调查询参数的名称,即前后端约定的字段,默认为“callback"
     7     jsonpCallback: 'cb',  // 指定回调函数名称
     8     cache: true,
     9     success: function (data) {   // jQuery 将 JSON 数据剥离出来,传入 success 和 error
    10         console.log(data);  // 'This is JSONP realized by jQuery.'
    11         $("#jsonp").html(data.message);
    12     }
    13 });
    14 }
    15 
    16 function get_json() {
    17 $.getJSON("/api", function (data) {
    18     $("#json").html('json info:' + data.message);
    19 })
    20 }

    如果你的项目没有使用类库框架,那么你可以使用如下方法(其实jquery就是基于这个原理):

    1 function handleResponse(response) {
    2     console.log(response);
    3 }
    4 
    5 var script = document.createElement('script');
    6 // 指定回调函数的名字为 handleResponse
    7 script.src = '/api?callback=handleResponse';
    8 document.head.appendChild(script);

    其实跨域还有其他办法,笔者这里只讲这两种方法,这是最简单最实用的两种方法。

    前端发展速度之快,只有不断的学习积累,才能紧跟时代的步伐。
  • 相关阅读:
    mysql 主从复制
    通过git-bash 批量管理VMware虚拟机
    MySQL基础
    lnmp架构
    搭建yum仓库服务器
    什什么是集群?么是分布式?
    nginx介绍1
    网络抓包工具 wireshark 入门教程
    DNS原理总结及其解析过程详解
    PetaPoco中使用Exists
  • 原文地址:https://www.cnblogs.com/zt123123/p/7600458.html
Copyright © 2011-2022 走看看