Javascript ajax调用赢得';不能同步执行
我已经建立了一个天气网站,首先调用flickr API,然后调用yahoo API以了解天气。问题是来自ajax调用的数据(来自YahooAPI)没有及时到达页面加载其内容的位置 我曾经尝试过减缓ajax调用速度的一些方法:Javascript ajax调用赢得';不能同步执行,javascript,jquery,html,ajax,performance,Javascript,Jquery,Html,Ajax,Performance,我已经建立了一个天气网站,首先调用flickr API,然后调用yahoo API以了解天气。问题是来自ajax调用的数据(来自YahooAPI)没有及时到达页面加载其内容的位置 我曾经尝试过减缓ajax调用速度的一些方法: setTimeout 将$.ajax(success:)调用的整个函数包装到另一个函数中,将其包装在setTimeout 将回调函数从$.ajax(成功:),放入$.ajax(完成:)参数 获取$.ajax(success:)传入的数据对象,并将其复制到另一个var,然后
setTimeout
- 将
调用的整个函数包装到另一个函数中,将其包装在$.ajax(success:)
setTimeout
- 将回调函数从
,放入$.ajax(成功:)
参数$.ajax(完成:)
- 获取
传入的$.ajax(success:)
对象,并将其复制到另一个var,然后跳出ajax调用,将处理数据的函数放入数据
,传递新对象$.ajaxComplete()
var
您正在使用jQuery吗?如果是这样的话,你必须把你的回电链接起来。从高层次上看,这看起来像:
//You might want to use .get or .getJSON, it's up to what response you're expecting...
$.getJSON('https://example.com/api/flickr', function(response) {
//This your callback. The URL would end up being https://example.com/api/yahoo/?criteria=lalalalala
$.getJSON('https://example.com/api/yahoo/', { criteria: response.propertyYouWant}, function(yahooResponse) {
//Do something with your response here.
});
});
编辑:我已经用一个有效的解决方案(基于上述AJAX请求)更新了您的代码片段,现在它显示了您的两个JSON对象,可以使用了 你能给我们看一些代码吗?异步性是Ajax的一个特点(A代表“异步”)。如果您将所有逻辑放入成功处理程序,并且页面的任何部分都不依赖于Ajax立即返回,那么您就可以了。请显示您的代码。如果没有它,我们就无法排除异步问题。使文本的某些部分加粗应该表明这些部分很重要。用粗体字写整个问题有点没用。它既不会使它变得更重要,也不会增加它被应答的概率。JSONP请求不能同步执行。这适用于
async
选项-“跨域请求和数据类型:“jsonp”
请求不支持同步操作。”是的,我使用的是jQuery。但是,flickr和yahoo调用正在执行相同的$.ajax。我没有使用flickr数据来检索yahoo数据。它有两个单独的调用,相同的函数处理两个diff请求。我设置了旗子,以确保它们不会相互超越。为什么我不能在$.ajax()中执行此操作?如何首先从调用中完全接收数据,然后将其发送到所选函数?我不想在调用的同一个函数中处理数据,这就是异步模式的本质,也是回调的需要。您永远无法保证能够从这两个API调用中分别获取数据(除非我们开始讨论收益率、承诺、生成器和其他ES6模式,但这是一个完全不同的主题)。无论是与.ajax还是.getJSON一起使用,都必须为一个API调用实现一个回调,以链接到下一个API调用,然后该回调将处理接下来需要发生的任何事情。您的回调可以是一个函数。。。你不需要它本身就是一个内联AJAX请求……我很难发布更多代码来显示我的实现。如果你担心页面加载太早,请将所有内容包装在`$(document).ready(function(){//Your stuff go here})中;而且你可以保证正确的执行。是脚本没有在页面之前加载。你说的话我都做了,但都没有用。这对你真的很有帮助,你可以快速浏览一下,加载页面,看看我在说什么。该链接包含在原始帖子中。
//You might want to use .get or .getJSON, it's up to what response you're expecting...
$.getJSON('https://example.com/api/flickr', function(response) {
//This your callback. The URL would end up being https://example.com/api/yahoo/?criteria=lalalalala
$.getJSON('https://example.com/api/yahoo/', { criteria: response.propertyYouWant}, function(yahooResponse) {
//Do something with your response here.
});
});