NPM 模块中的 JSONP(节点/浏览器)跨域
JSONP in NPM module (Node/Browser) Cross domain
我正在编写一个NPM模块,应该在Node和浏览器上工作(通过Browserify打包)。
其部分功能是执行 JSONP 调用,并返回解析的数据。我无法让它工作。我尝试使用 jsonp-client
和 jsonp
npm 模块,但无济于事。
node-jsonp
: https://www.npmjs.com/package/node-jsonp
promise = new promise (resolve, reject) ->
nodejsonp url, (json) ->
resolve json
上面的代码片段在 Node 中工作正常,但在浏览器中由于同源跨域安全策略而失败。
jsonp-client
https://www.npmjs.com/package/jsonp-client
promise = new promise (resolve, reject) ->
jsonpclient url, (err, data) ->
if (err)
console.log err
resolve data
在这种情况下,我收到错误"错误:无法在URL(...)上找到回调",但我无法从文档中了解如何正确实现该功能。
帮不上什么忙?:)
编辑:提到的第一个包实际上是"node-jsonp"而不是"jsonp"
看起来您使用他们的 API 不正确。第一个包的 API 是:jsonp(url, opts, fn)
,所以你应该重写代码并添加选项:
promise = new promise (resolve, reject) ->
jsonp url, {}, (json) ->
resolve json
第二个在文档中有这个:
在浏览器上,您必须在 URL 上提供有效的回调。
它需要手动将回调参数添加到 URL。您应该检查 jsonp 的工作原理:它添加了callback
GET 参数和响应包装在此回调函数的调用中。即
- 您收到的请求:
<api url>?callback=cb
; - 服务器呈现JavaScript响应,该响应将在应用程序
cb({json});
中eval
- 为了处理此响应,您应该具有全局函数
cb
,它将接收 JSON 作为参数。
相关文章:
- 检测iframe是否跨域的愚蠢方法
- 如何使用自定义标头跨域执行AJAX POST
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 跨域ajax请求
- 没有根和跨域,无法使JSON正确读取
- 如何检查消息(postMessage)来自哪个跨域iframe
- 为什么我能够从javascript控制台发送跨域ajax请求
- 如何从我的跨浏览器插件的跨域HEAD请求中检索响应标头
- NPM 模块中的 JSONP(节点/浏览器)跨域
- 使用document.write是跨浏览器跨域同步加载脚本的唯一可能方式
- 来自跨域的图像在HTML中显示良好,但ajax从浏览器控制台调用相同的图像失败
- 获取JSON文件跨域所有浏览器
- 如何在浏览器中模拟按键来使用JavaScript控制跨域iframe
- 如何正确使用postMessage与html5和现代浏览器做跨域消息传递?我还是会出错
- 跨域GET请求,浏览器和本地主机之间的差异进行调用
- 从浏览器托管的JavaScript应用到自定义服务器的跨域资源共享
- 跨域 - 适用于现代浏览器的轻量级 JavaScript 库
- 浏览器同步 + gulp:跨域 Cors 问题
- Angular跨域post:在某些浏览器下会失败
- 跨浏览器/站点/域脚本之间的区别是什么?