Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 接收数据时ajax调用中的多个ajax调用_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 接收数据时ajax调用中的多个ajax调用

Javascript 接收数据时ajax调用中的多个ajax调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,我不熟悉AJAX/jQuery,所以请耐心听我说……这里有一个让人大吃一惊的例子;) 我正在对一个php脚本(process_data.php)进行AJAX调用,该脚本处理大量数据并返回三个标志。每个标志表示进程的完成以及调用脚本的数据可用性。我的ajax调用应该做到以下几点: Call process_data.php asynchronously.... process_data.php "echoes" three flags (at approximately 4 second in

我不熟悉AJAX/jQuery,所以请耐心听我说……这里有一个让人大吃一惊的例子;)

我正在对一个php脚本(process_data.php)进行AJAX调用,该脚本处理大量数据并返回三个标志。每个标志表示进程的完成以及调用脚本的数据可用性。我的ajax调用应该做到以下几点:

Call  process_data.php asynchronously....

process_data.php "echoes" three flags (at approximately 4 second intervals)

Upon echoing of the first flag...make another ajax call to get_first_dataset.php

Upon echoing of second flag...make ajax call to get_second_dataset.php

Upon echoing of third flag...make ajax call to get_third_dataset.php

因此,基本上我是在问如何“实时”处理从AJAX调用返回的数据,以及如何在正在运行的AJAX调用中进行另一个AJAX调用……再一次,如果我使用的是“新手”术语,那么很抱歉……

这在javascript中是不可能的。(至少不带web套接字)

Javascript将等待整个主体下载完成,因此它将等待12秒,以便PHP文件完成回显

因此,解决办法是:

让PHP在第一次调用后立即返回。然后设置另一个端点Javascript可以每隔一段时间查询以获取标志的状态

Call process_data.php call completes immediately
Call process_data_status.php at 4 second intervals
if process_data_status.php returns flag 1
    make ajax call to get_first_dataset.php
if process_data_status.php returns flag 2
    make ajax call to get_second_dataset.php
if process_data_status.php returns flag 3
    make ajax call to get_third_dataset.php

这在javascript中是不可能的。(至少不带web套接字)

Javascript将等待整个主体下载完成,因此它将等待12秒,以便PHP文件完成回显

因此,解决办法是:

让PHP在第一次调用后立即返回。然后设置另一个端点Javascript可以每隔一段时间查询以获取标志的状态

Call process_data.php call completes immediately
Call process_data_status.php at 4 second intervals
if process_data_status.php returns flag 1
    make ajax call to get_first_dataset.php
if process_data_status.php returns flag 2
    make ajax call to get_second_dataset.php
if process_data_status.php returns flag 3
    make ajax call to get_third_dataset.php

这不是一个大的精神狂欢。。。您基本上需要一个接一个地链接ajax回调。。这句话里只有一些东西

$.ajax({
    url: "process_data.php",
    data: { name: 'John', age: 22 },
})
.done(function() {
    $.ajax({
        url: "process_data.php",
        data: { name: 'John', age: 22 },
    })
    .done(function() {
        $.ajax({
            url: "process_data.php",
            data: { name: 'John', age: 22 },
        })
        .done(function(){
            console.log('last call done!')
        })
    })
})

最重要的是,您必须处理来自服务器的数据,并将其链接到DOM并进行操作。。就这样

这可不是一个让人大吃一惊的事。。。您基本上需要一个接一个地链接ajax回调。。这句话里只有一些东西

$.ajax({
    url: "process_data.php",
    data: { name: 'John', age: 22 },
})
.done(function() {
    $.ajax({
        url: "process_data.php",
        data: { name: 'John', age: 22 },
    })
    .done(function() {
        $.ajax({
            url: "process_data.php",
            data: { name: 'John', age: 22 },
        })
        .done(function(){
            console.log('last call done!')
        })
    })
})

最重要的是,您必须处理来自服务器的数据,并将其链接到DOM并进行操作。。就这样

您可以使用setInterval(),将ajax放在函数中,并在最后一次“echo”后调用间隔setInterval(youtAjaxFunction,1000//每1秒),您可以终止间隔函数。您可以使用setInterval(),将ajax放在函数中,并在最后一次“echo”后调用间隔setInterval(youtAjaxFunction,1000//每1秒)您可以终止interval函数。我需要在第一个ajax调用接收数据时进行ajax调用……而不是在从“process_data.php”获取数据之后。每隔4秒,“process_data.php”会回显一个标志,外部ajax调用需要读取该标志并触发另一个对不同脚本的ajax调用……您的解决方案使用“.done”方法,该方法在进行新的ajax调用之前等待ajax调用完成……所以在ajax完成之前,
setTimeout
,您认为呢?。。类似节流阀的东西?我需要在第一个ajax调用接收数据时进行ajax调用…而不是在从“process_data.php”获取数据之后。每隔4秒,“process_data.php”会回显一个标志,外部ajax调用需要读取该标志并触发另一个对不同脚本的ajax调用……您的解决方案使用“.done”方法,该方法在进行新的ajax调用之前等待ajax调用完成……所以在ajax完成之前,
setTimeout
,您认为呢?。。有点像节流阀?“这在javascript中是不可能的(至少没有web套接字)”……我在思考javascript中处理流式数据的“onprogress”这句话?!onprogress在流式处理时不会给你响应体。本质上你想做的是”这在javascript中是不可能的。(至少在没有web套接字的情况下)“……我在思考javascript中处理流数据的“onprogress”这句话?!onprogress不会提供响应主体,因为它是流式的。基本上你想做的是