Javascript 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,然后

我已经建立了一个天气网站,首先调用flickr API,然后调用yahoo API以了解天气。问题是来自ajax调用的数据(来自YahooAPI)没有及时到达页面加载其内容的位置

我曾经尝试过减缓ajax调用速度的一些方法:

  • setTimeout
  • $.ajax(success:)
    调用的整个函数包装到另一个函数中,将其包装在
    setTimeout
  • 将回调函数从
    $.ajax(成功:)
    ,放入
    $.ajax(完成:)
    参数
  • 获取
    $.ajax(success:)
    传入的
    数据
    对象,并将其复制到另一个var,然后跳出ajax调用,将处理数据的函数放入
    $.ajaxComplete()
    ,传递新对象
    var
我尝试了更多的方法来解决这个问题,但我已经尝试了3天,没有找到解决方案。有人能帮我吗

这里是该项目的链接


您正在使用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.
    });
});