当前位置: 首页 > 知识库问答 >
问题:

连续的Ajax调用进行了数据交换

羊舌诚
2023-03-14

我有以下情况。

我使用以下方法进行ajax调用以加载json数据。

// Generic loadJSON
function loadJSON(method, url, callback)
{
    $.ajax({
        type: method,
        url: url,
        jsonpCallback: 'jsonCallback',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function (json) {
            callback(json);
        },
        error: function(e) {
            console.log(e);
        }
    });
}

我设置了以下函数来加载json数据

    loadJSON('GET', 'url/Scripts/data.json?callback=?', function (response)
{
    jsonData = response;
    var returnHighest = getHighestValue("Return");
    var riskHighest = getHighestValue("Risk");
    var returnLowest = getLowestValue("Return");
    var riskLowest = getLowestValue("Risk");
    gauge.max = returnHighest / 100;
    gauge.min = returnLowest / 100;
    gauge2.max = riskHighest / 100;
    gauge2.min = riskLowest / 100;
    //gaugeInput.max = returnHighest / 100;
    // gaugeInput.min = returnLowest / 100;
    // gauge2Input.max = riskHighest / 100;
    //gauge2Input.min = riskLowest / 100;
    loadJSON('GET', 'url/Scripts/data2.json?callback=?', function (response)
    {
        jsonData2 = response;
        CalculateRiskReturnCorrelation();
        gauge.value = GetReturn() / 100;
        $('#returnValue').html("" + (gauge.value*100).toFixed(2) + "%");
        gauge2.value = GetRisk() / 100;
        $('#riskValue').html("" + (gauge2.value * 100).toFixed(2) + "%");
        CalculateRiskReturnCorrelation();
    });

    // Loads JSON to change the alternative fund data
    loadJSON('GET', 'url/Scripts/data3.json?callback=?', function (response) {
        jsonData3 = response;
        // Set gloabl vairables
        alternativeColor = jsonData3.Fund1.Color;
        alternativeName = jsonData3.Fund1.Name;
        alternativeMax = jsonData3.Fund1.Max;
        // Handle possible height change of label
        $('#alternatives-text').html(alternativeName);
        var newTopPos = (($('#alternatives-text').height() - $('#slider_alternatives').height()) / 2) + $('#alternatives-text').position().top;
        $('#alternatives-text').css({ top: newTopPos + "px" });
        $('#slider_alternatives').css({ background: alternativeColor });
        $('#slider_alternatives').slider('option', { min: 0, max: alternativeMax });
        var chart = $('#pie').highcharts();
        chart.series[0].addPoint({ name: alternativeName, y: 0, color: alternativeColor, style: { fontSize: "15px", "text-align": "right" } });
        alternativesSet = true;

    });
});

现在,有时这会正确加载,有时第三个JSON调用会从第二个JSON调用加载数据。不确定这是怎么可能的,因为它们有不同的URL,并且它们的响应函数完全不同并且是自包含的。第二个json调用同时获得一条成功消息和一个错误。

这似乎是一个时间问题,因为它有时起作用,但我看不出反应是如何被混淆的。任何帮助或建议都将不胜感激

共有1个答案

羊舌承颜
2023-03-14

我认为就时间而言,一个电话在另一个电话之前返回。在这种情况下,您需要等待每个返回,然后再开始下一个。尝试将ajax调用设置为async: false,如下所示:

// Generic loadJSON
function loadJSON(method, url, callback)
{
  $.ajax({
    type: method,
    url: url,
    jsonpCallback: 'jsonCallback',
    contentType: "application/json",
    dataType: 'jsonp',
    async: false,
    success: function (json) {
        callback(json);
    },
    error: function(e) {
        console.log(e);
    }
  });
}
 类似资料:
  • 问题内容: 我有一个文件列表,我想从Android设备上传到后端。由于内存的限制,我只想在第一个完成后进行第二个API调用,第二个完成后进行第三个API调用,依此类推。 我写了类似 但是我觉得这可能与Rx的精神背道而驰,俗话说,如果您使用的是Observable.create,则可能做错了……这是一种合理的方法吗?通过Retrofit的RxJava集成,是否有更好的方法来实现此目的? 问题答案:

  • 问题内容: 我想在点击提交按钮时验证WordPress帖子上的用户条目,显示错误消息是否存在问题,如果一切正常,则提交表单。我有一个PHP函数进行检查,如果输入的数据还可以,则返回,否则返回一些错误代码。以下JavaScript发出AJAX请求,并应在成功检查后继续提交表单,但不会: 该代码是根据WPSE问题改编的,该问题最初对我不起作用,因为未提交表单。我发现,如果绑定到的jQuery函数返回t

  • 问题内容: 现在,我试图调用已在ASP.NET MVC应用程序(即)中定义的启用AJAX的Web服务。但是该服务从未在我的javascript函数中调用。 如果我在非ASP.NET MVC应用程序中尝试该调用AJAX Web服务的相同技术,则可以正常工作,因此它使我怀疑ASP MVC路由在尝试进行AJAX Web服务调用时是否会以某种方式干扰事物。 您是否知道为什么没有调用我的Web服务?下面的代

  • 问题内容: 所以,我有一张表,上面有这样的行: 每次扫描警报时(即每次触发或清除警报时)都会添加“已扫描的警报”行。任何警报都会添加带有特定Ev_Custom1的行。第一列Ev_Message包含一个计算机ID,该ID使我可以将警报与其他计算机分开。(您不喜欢任意的列名吗?)超过900条独特的警报消息。 我希望查询返回的内容是这样的: 这将是两个日期之间过滤的查询。我可以更改进入表的数据,但是有9

  • 问题内容: 对于需要刷新以设置的时间间隔呈现给用户的部分数据的简单Web应用程序,仅使用setInterval()从端点获取JSON而不使用适当的轮询框架是否有任何弊端? 出于示例的原因,可以说我每5秒刷新一次处理作业的状态。 问题答案: 根据我的评论: 我将使用 [docs] 并始终在收到上一个响应时调用它。这样,在请求/响应花费的时间超过间隔时间的情况下,可以避免可能的拥塞或函数堆栈或任何您想

  • 问题内容: 我有一个标准的javascript ajax调用,其中将data:设置为json数据。 我试图在php中获取数据,这是行不通的。 但是,可行。 我想知道这可能是我的框架或诸如此类的无法正常工作的东西吗?还是还有其他我可以用来获取数据的东西? 编辑: 因此,框架YII和扩展Restfullyii具有使用一种方法获取其数据的方法return json_decode(file_get_con