JsonP是一种使用JS调用某些服务的方法。这是一个公认的解决跨域调用服务的方案,它只需要通过HTTP GET一段包含script标签的脚本。
只需要把回调函数参数值设为使用"define" ,就能用 RequireJS来实现JSONP。这意味着,你可以用JSONP的方式来获取一个模块。
最好只在初始化应用设置的时候使用这种方法。因为如果JSONP 服务超时,那其他通过define() 定义的模块将不会执行,并且异常处理也不能很好的运行。
jsonp服务,JSONP的callback参数为"callback",因此"callback=define"告诉API将JSON响应包裹到一个"define()"中。
- require(["http://example.com/api/data.json?callback=define"],
- function (data) {
- //data将作为此条JSONP data调用的API响应
- console.log(data);
- }
- );
JSONP的这种用法应仅限于应用的初始化中。一旦JSONP服务超时,其他通过define()定义了的模块也可能得不得执行,错误处理不是十分健。JSONP 返回的值必须是一个Object。Array、String、Number都不行。
这种方式也不能用于长轮询式的连接 -- 这种APIs都会进行实时流处理。这种APIs在接收到每个响应后都需要清除缓存,而对于同一个 JSONP URL, RequireJS 只会请求一次-- 随后的都会使用缓存。
JSONP 服务在加载中的异常目前只有服务超时, 因为 script 标签加载没有提供更多网络异常信息。为了检测异常,你可以重写 requirejs.onError() 。这里是是关于 异常处理 的更多信息。