我使用$从闪烁提要api获得json响应。getJSON,但当我尝试使用Fetch时,我似乎只得到一个XML响应。
这有效:
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON(flickerAPI, {
tags: "searchTerm",
tagmode: "any",
format: "json"
})
.done(function (data) {
//....
});
这不起作用:
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
var request = new Request(flickerAPI, {
mode: 'no-cors',
tags: 'searchTerm',
tagmode: 'any',
format: 'json'
});
fetch(request)
.then(function (res) {
return res.json();
})
.then(function (text) {
console.log(text);
});
我还想知道为什么在使用Fetch API时,我会得到:“在请求的资源上没有‘Access-Control-Allow-Origin’头。因此,不允许访问源' null'。如果不透明响应满足您的需要,请将请求的模式设置为“no-cors ”,以便在禁用cors的情况下获取资源。”而用$的时候。getJSON不是。谢谢大家!!
简短的回答:fetch(...)
方法的参数和fetch(...)
方法的行为与$. getJSON(...)
方法的参数和$. getJSON(...)
方法的行为-所以您不能期望fetch(...)
做任何像$. getJSON(...)
所做的事情。
更长的回答,回应您的具体问题:
我还想理解为什么在使用Fetch API时会得到:“请求的资源上不存在‘访问控制允许源代码’头……而在使用$.getJSON时则不存在。
您的请求URL包含子字符串< code>callback=?,所以< code>$。getJSON将其作为JSONP处理:
如果 URL 包含字符串“回调 =?”(或类似,如服务器端 API 所定义),请求被视为 JSONP。
...这意味着在幕后,它不是从JavaScript发送跨域请求,而是创建一个加载JSONP响应的脚本
元素。由于浏览器允许使用脚本
元素来跨域加载脚本,因此永远不会遇到任何限制。
但是,当您使用Fetch API进行调用时,这不会产生任何幕后魔法,根据URL自动将请求识别为JSONP请求,也不会创建<code>脚本</code>元素来加载响应。相反,它只会导致直接向该发出请求http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?“
URL。
但是http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?"
实际上并不打算与Fetch API或XHR一起使用,因此它发送回的响应不包括Access-Control-Allow-Origin
响应头。
根据CORS协议,对于浏览器来说,缺少Access-Control-Allow-Origin
响应标头意味着“不要将此响应公开给Web应用程序中运行的任何客户端JavaScript”。
因此,您的浏览器会记录“请求的资源上不存在'访问控制-允许-源'标头。因此,不允许访问源“null”消息,让您知道您的脚本将无法访问响应,以及原因。
如果您正在设置< code >模式:“no-CORS”,我想您不会看到这条消息。但是无论如何,您基本上永远不要设置< code>mode: 'no-cors',因为这样做与缺少< code > Access-Control-Allow-Origin 响应头具有相同的效果——它阻止您的脚本对响应进行任何访问。
至于期望标签:'search chTerm'
、标签模式:'any'
和格式:'json'
如果您在作为fetch(...)
方法的第二个参数给出的对象中指定它们,@Yazan的评论是正确的:这些是flickr API的自定义查询参数,因此如果您使用Fetch API执行GET请求,则需要在URL中将它们指定为查询参数。
$. getJSON
,相比之下,会自动为您执行此操作:
发送到服务器的数据作为查询字符串附加到URL。
...其中,它所指的数据是您作为 $.getJSON
的第 2 个参数给出的名称/值对的对象。
相比之下,对于fetch(...)
方法,您在第二个参数中指定的名称和值不能是任意查询参数。相反,那里只允许一组预定义的名称:
方法
:请求方法,例如GET、POST标题
:您要添加到请求中的任何标题。正文
:要添加到请求中的任何正文模式
:要用于请求的模式。凭据
:要用于请求的请求凭据。缓存
:要用于请求的缓存模式重定向
:要使用的重定向模式referer
:不指定referer、客户端或URL的USVStringreferer策略
:指定referer HTTP头的值完整性
:包含请求的子资源完整性值这是因为在开发模式下,为了通过 Webpack 实现热加载,CSS代码是打包在 JavaScript 代码中,并动态打到页面中去,从而元素重绘引起了闪烁。 不用担心,在生产模式下,CSS代码会单独打包至独立的文件并置于head标签内,不会出现页面闪烁的现象。
我在Lollipop上的共享元素转换中看到了奇怪的事情。共享元素在开始动画之前闪烁(请看视频https://www.youtube.com/watch?v=DCoyyC_S-9A) 我不知道为什么会这样。但是,当我添加
我试图用pyplay制作一个游戏,我几乎完成了,但我想让被画在墙上的盒子不闪烁,这些红色的盒子在整个游戏中闪烁,我不想让它们闪烁,最后,我在一个if条件下调用player碰撞函数,在这里每当我制作新的碰撞器时,我每次都要在if条件下添加函数,我想要的是碰撞器对象自动调用这个函数,而不需要我在if语句中为碰撞器的每个实例调用它对象。请指导我如何这样做。
减低闪烁 以Interlace(交错扫描)方式在电视机输出PSP™规格软件的影像时,设定是否要减低画面的闪烁。 关 不减低画面的闪烁。 开 减低画面的闪烁。
我正在做一个选择工具,我已经带来了这些解决方案,在第一次使用J面板getGraphics方法,我在鼠标被拖动的任何地方绘制一个椭圆形,在第二次我覆盖了油漆组件方法来绘制椭圆形。 当我执行第一个时,拖动鼠标会闪烁,绘图很差,而第二个方法运行完美。为什么会发生这种情况?,如果我在第一个解决方案中退出重新绘制,它会绘制椭圆形并且不会“删除”它们。 这样做的最佳实践是什么?,当我用getGraphics绘
我正在用pygame制作一个游戏,在制作这个游戏时,我在屏幕上使用了很多文本。但是当我在我的代码中达到这一点时,第一个写的文本不会闪烁,但是第二个会闪烁,我想改变这一点。而且,当我拿着钥匙时,当我只想让它写一次信时,这封信就会被一遍又一遍地快速地写下来。代码: 编辑:现在唯一的问题是闪烁的文字,因为我得到了一个解决方案