【问题标题】:jQuery multiple ajax callsjQuery多个ajax调用
【发布时间】:2014-05-19 17:34:54
【问题描述】:

在对两个不同的页面进行一些 ajax 调用时,一个页面不断发送响应,而另一个页面则继续加载并在完成后发送响应。

这就是我正在做的:

$('.container').html('Please wait... Working : <span id="done">0</span></div>').fadeIn("slow");
$.post('work.php',{'p' : 'proccessImages'},function(data){
    if(data == "success"){
        $('div.container').html("Images processed!").slideDown(3000);
    }
});

现在我实际上在做的是,当进行上述调用时,“Work.php”会创建一些需要时间的图像缩略图,而还有另一个名为“done.php”的脚本会检查有多少图像生成并使用 JSON 响应,当“Work.php”完成处理时,它还会发回“成功”消息。这是另一个函数,它使用已经完成的图像更新 id 为“完成”的跨度!

function repeatJSON(){
    $.getJSON( "http://localhost/done.php", function( data ) {
        var items = [];
        $.each( data, function( key, val ) {
            var currentValue = $("#done").text();
            if(val !== currentValue){
                $("#counter").html("<b>"+val+"</b>").css({"color" : "black"}).hide().fadeIn("slow");
            }
            setTimeout(function(){repeatJSON()},2000);
        });
    });
}

如果我在 $.post 中执行上述重复函数,它将不起作用,我将不再从“Work.php”得到响应,尽管脚本在后台继续工作。

是否有可能进行两次多次通话?一个持续工作,另一个持续更新?

【问题讨论】:

  • 您需要记住 AJAX 中的第一个“A”是“异步”。您可能需要重新考虑您的逻辑以使其按您的意愿运行。
  • 听起来你可以从使用会话来解决这个问题中受益。我之前也遇到过类似的问题。基本上,您长时间运行的脚本将更新一些会话变量(在循环中),然后编写它所拥有的内容并关闭/打开会话。您的“进度”脚本将简单地访问您的会话并从中收集信息并将其发送回您的 AJAX 请求。虽然与您的目的不完全相关see this post 我的意思的一个例子。

标签: php jquery ajax json


【解决方案1】:

默认情况下 AJAX 调用是异步的,但 jquery AJAX 函数提供了进行同步调用的属性。 您可以将 async 属性设置为 false 以进行同步调用,然后在 Work.php 的成功模块中,您可以向加载依赖数据的另一个文件发出另一个请求。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2011-05-21
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多