解决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);

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

时间: 2024-11-04 15:25:09

解决js跨域问题的相关文章

解决js跨域问题的思路及实践

js跨域问题是比较头疼的问题,因为最近的项目都是基于webview这个组件来写的.我加载本地的html文件,文件中有些连接去请求服务器,这时候就会报错,因为安全服务器拒绝js去请求.还有一种问题就是我自己在本地搭建的web服务器(Tomcat,node.js构建的服务器).去请求另外远程服务器的数据,也会发生上述问题.因此很多时候开发的时候,不好测试.今天碰到了一种好方法.特此记录一下. 首先我搭建了web服务器,tomcat和node.js构建的两种web服务器. 思路就是我们在hosts文件

jsonp解决js跨域问题

hi,everybody.自己遇到的问题跟大家分享下,在电商网站中,经常会遇到跨域问题. google,百度了好久.真不容易啊   js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域.   然后说用jsonp的方法解决,好了,又要google,百度 jsonp了,漫长的搜索后,才知道jquery的ajax需要修改    $.ajax({          

解决Js跨域访问的问题

用Js获取Html标签<input type="file"/>的路径!遇到代码拒绝访问,提示安全验证,不允许跨域访问,简单的设置一下浏览器即可,不过对于不知道的朋友们遇到这种情况也是够发愁的.

中转页面解决js跨域传值问题

a站的t1页面要window.showModalDialog一个b站的t2页面并得到一个返回值, 如果淡出用window.showModalDialog肯定不行, 我们建一个中转页面t3,用t3来跳转t2,再用t1来window.showModalDialog t3页面,这样就可以跨域取值. t3就是相当于把其它站的页面加载进我们的页面.

服务器端解决JS跨域调用问题

一. 使用JSONp方式调用 不做详细讲解,可以参考jq文档 二. 服务端配置 修改Web.config 文件 <system.webServer> <modules runAllManagedModulesForAllRequests="true"></modules> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin&

问卷项目--js跨域

项目中因为要把问卷投放到第三方,并且对方要收集统计数据,因此在调用对方接口的时候就会存在跨域的问题. 1. 什么叫js跨域 浏览器不允许javascript跨域请求其他域名下的内容.端口号不同,主域相同子域不同,协议不同,不同域名等等情况 下面表格里的a.js是无法获取b.js的内容的. 情况 举例 端口号不同 http://www.baidu.com/a.js   vs.  http://www.baidu.com:8080/b.js 主域相同子域不同 http://www.baidu.com

js跨域问题

如何解决js跨域问题 Js跨域问题是web开发人员最常碰到的一个问题之一.所谓js跨域问题,是指在一个域下的页面中通过js访问另一个不同域下 的数据对象,出于安全性考 虑,几乎所有浏览器都不允许这种跨域访问,这就导致在一些ajax应用中,使用跨域的web service会成为一个问题. 解决js跨域问题,目前在客户端和服务端都有一些现成的解决方案,但这些方案并不能解决所有问题.下面我们先来看下有哪些常用的解决方案,并针对空间产品 对跨域问题的需求给出一个space自己的解决方案,希望能对其他产品

5种处理js跨域问题方法汇总

1.JSONP跨域GET请求 ajax请求,dataType为jsonp.这种形式需要请求在服务端调整为返回callback([json-object])的形式.如果服务端返回的是普通json对象.那么调试的时候,在chrome浏览器的控制台会报"Uncaught SyntaxError: Unexpected token"错误:在firefox浏览器的控制台会报"SyntaxError: missing ; before statement"错误. JSON是一种

谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个ifame高度自适应网上一搜一大把,今天要讲的如何在不同的网站下进行相互的调用跟在同一个网站下是一个效果:例如我在自己的项目里面Iframe  了第一博客的页面  http://www.diyibk.com/   当第一博客的页面高度变化了怎么通知父页面呢? 这个时候在谷歌下肯定是拿不到 ifram