node.js express jquery ajax post options 跨域问题 解决办法

就不啰嗦了,直接给正确答案。

一 服务器端 也就是 node.js & express
最简单的就是使用 expressjs/cors
安装 npm install cors --save
引入 var cors = require('cors');
使用 app.use(cors());
这就搞定了服务器端。

二 客户端 也就是 js & jQuery
首先不能用快捷方法 $.post() 了,得用 $.ajax()

$.ajax({
    type: 'POST',
    url: '...',
    data: JSON.stringify(params),
    processData: false,
    contentType: 'application/json',
    dataType: 'json'
}).then(function(ret){
    alert(ret);
});

除了 {type: 'POST', url: '...', dataType: 'json'} 这几个参数没有变化之外,
不同之处在于:
data 得先用 JSON.stringify() 手动转换成 json 字符串,
processData 指定为 false 告诉 jQuery 不要再对 data 进行处理,
contentType 指定为 application/json 告诉服务器,我发送的数据是 json 格式。

我自己解决这问题的时候,搜索到的答案都少指定了 processData
于是服务器收到的数据变成这样子:{ '{id:123, name:"asd"}' }
可能是 jQuery 不同版本之间的差别吧,
反正手动指定一下 processData: false 就不会错。

但为什么服务器端收到的会是一个 OPTIONS 和一个 POST 请求?
图片
大概是浏览器安全机制方面的问题吧……


王道中强流
不为繁华易匠心

在福州“土生土长”的 1986 年老程序员一枚,专注 Web 技术三十年。

1.7k 声望
44 粉丝
0 条评论
推荐阅读
Linux自动备份MySQL
首先找到你的MySQL配置文件my.cnf {代码...} 然后修改它, {代码...} 在[client]里增加三行: {代码...} 本来不需要这些操作,直接把用户名密码写到备份脚本里就可以,但是 MySQL 5.6 之后在命令行里写密码会出现...

王道中强流阅读 1.9k

再也不学AJAX了!(三)跨域获取资源 ① - 同源策略
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第四篇,最近更新于 2023 年 1...

libinfs19阅读 4.1k评论 4

封面图
再也不学 AJAX 了!(一)AJAX 概述
跨域获取数据:介绍了与「跨域发送 AJAX 请求」相关的一些内容:例如「同源策略」与四种跨域请求资源的方式:JSONP,CORS,postMessage 和 WebSocket;

libinfs22阅读 4k评论 6

封面图
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
所谓的权限,其实指的就是:用户是否能看到,以及是否允许其对数据进行增删改查的操作,因为现在开发项目的主流方式是前后端分离,所以整个项目的权限是后端权限控制搭配前端权限控制共同实现的

水冗水孚11阅读 1.5k

Nodejs 手动搭建 Express 项目
默认ejs模板只支持渲染以ejs为扩展名的文件,可能在使用的时候会觉得它的代码书写方式很不爽还是想用html的形式去书写。在这里可以使用engine 注册模板引擎的函数,让他处理指定后缀名的文件

yeungx6阅读 8.9k评论 5

使用 `postMessage` 跨域名迁移 `localStorage`
朋友的网站有个需求:要从 A 域名迁移到 B 域名。所有内容不变,只是更改域名。这个需求不复杂,理论上改下配置然后 301 即可。但这个网站是纯静态网站,用户数据都存在 localStorage 里,所以他希望能够自动帮用...

Meathill6阅读 547评论 5

封面图
从JQuery出发总结的关于原型使用上的一些浅薄理解
MyObj本身是一个对象,可以通过MyObj.doit()的方式调用其上的方法或属性为了实现需求,第一反应是: {代码...} 然后在MyObj上挂载静态方法,在MyObj.prototype上挂载对象方法。

zxl200707014阅读 323

封面图

在福州“土生土长”的 1986 年老程序员一枚,专注 Web 技术三十年。

1.7k 声望
44 粉丝
宣传栏