jsonp 怎么实现跨域同步?

2014-08-07 11:48:35 +08:00
 Conte
现在通过jsonp到其他系统接口获取到数据,要根据得到的数据进行下一步操作,并且操作不能够在返回成功的方法success中进行,而jsonp又没有同步,该怎么解决啊。
7088 次点击
所在节点    问与答
15 条回复
allenm
2014-08-07 11:50:36 +08:00
JSONP 实现不了。不支持低端浏览器的话,可以使用 XHR + Access-Control-Allow-Origin 来解决。
lyragosa
2014-08-07 11:54:54 +08:00
jsonp的本质是将一些代码 append到当前页,之后用<script></script>包裹起来。

所以他天生跨域,但缺点就是……他本质是就是将一段js放进来执行而已……

Access-Control-Allow-Origin 可以解决问题,但可能引发安全隐患,请自行斟酌。
jsonline
2014-08-07 12:54:43 +08:00
回调啊
jsonp 返回
window.onFooSuccess({/* your data */})
jsonline
2014-08-07 12:55:23 +08:00
为啥要同步?需求是?
dong3580
2014-08-07 12:56:12 +08:00
@allenm
@lyragosa
Access-Control-Allow-Origin貌似得对方网站或者系统设置才行吧。
@Conte
这样的话别人也能请求了。建议用后端搞定,
binux
2014-08-07 12:59:14 +08:00
Conte
2014-08-07 14:09:18 +08:00
@dong3580 嗯 正常情况下是后台走开放系统请求数据就行了,我这走偏门,想直接用跨域从接口来获取...
Conte
2014-08-07 14:10:57 +08:00
@jsonline 因为后面的操作要使用得到的数据啊 不同步的话数据没有得到就进行下面的操作了啊 你没懂么
jsonline
2014-08-07 14:25:13 +08:00
@Conte 不一定要同步,可以加一个状态变量
dingyaguang117
2014-08-07 16:30:43 +08:00
@Cont为啥不能在回调中进行 后续操作?
jsonline
2014-08-07 16:35:32 +08:00
@dingyaguang117 嗯?你 at 的是谁?
learnshare
2014-08-07 16:36:35 +08:00
@Conte callback 为啥不行?
allenm
2014-08-07 17:25:51 +08:00
@dong3580 正确使用 Access-Control-Allow-Origin 就没有安全性问题。不要老想着设置成 * 。这些安全性问题都是偷懒造成的。https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
juicy
2014-08-07 17:26:53 +08:00
可以让后端程序去访问所谓的“其他系统接口获取”,然后根据结果来发送前端代码,一定要前端来掺和此事?
siteshen
2014-08-07 23:01:32 +08:00
@lyragosa Access-Control-Allow-Origin 比jsonp安全啊,毕竟前者还可以限制域。

可以考虑nginx上配置个proxy直接代理到“其他系统系统”。
好处是,不需要修改后端代码,只需要预留一个类似/api-proxy之类的路径。
坏处是,需要配置nginx,架构上会复杂些,开发调试也不太方便。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/126549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX