Javascript 可以这样运行多个ajax吗?

Javascript 可以这样运行多个ajax吗?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我想运行一个Ajax查询,从响应“TesterID”中获取“数据”。然后,我想用之前收到的“Datum”运行第二个Ajax,在另一个页面(DB条目)上用这个值进行更新 这是不起作用的代码 <script> /* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Mi

我想运行一个Ajax查询,从响应“TesterID”中获取“数据”。然后,我想用之前收到的“Datum”运行第二个Ajax,在另一个页面(DB条目)上用这个值进行更新

这是不起作用的代码

<script>

/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */ 
$(document).ready(function(){

var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */ 


        $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID_Testende.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */


                var CID = response['CID'];
                var Datum = response['Datum'];



            },
             error: function(jqxhtt, status, exception) {
         alert('Exception:', exception)

            }
        }




        var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
         $.ajax({ /* AJAX aufrufen */
            url: 'ma_TestendeSQL.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(data){ /* Die zurückgegebenene Daten erhalten */


                 alert('Successfully called');
     },
     error: function(jqxhr, status, exception) {
         alert('Exception:', exception)

            }
        }


        });


</script>
第一个Ajax与PHP页面
ma\u get-TesterID\u Testende.PHP
配合得很好。我已经单独测试了它,但是当我添加第二个Ajax尝试更新时,我上面发布的代码不起作用

<script>

/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */ 
$(document).ready(function(){

var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */ 


        $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID_Testende.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */


                var CID = response['CID'];
                var Datum = response['Datum'];



            },
             error: function(jqxhtt, status, exception) {
         alert('Exception:', exception)

            }
        }




        var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
         $.ajax({ /* AJAX aufrufen */
            url: 'ma_TestendeSQL.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(data){ /* Die zurückgegebenene Daten erhalten */


                 alert('Successfully called');
     },
     error: function(jqxhr, status, exception) {
         alert('Exception:', exception)

            }
        }


        });


</script>
所以问题是:有可能像这样运行两个Ajax吗

谢谢

编辑: AJAX调用为空或未启动。 进一步调查:Ajax会通知我错误部分和空异常,而不会通知我成功部分。因此,它不会进入页面
ma_get-TesterID\u Testende.php
,也不会返回
数据。
无法启用跨站点脚本可能是问题所在

但在另一个页面中,类似的Ajax调用运行良好

$(document).ready(function(){

var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */ 

        $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */

                var len = response.length;

                $("#Teststart").empty(); /* Die erhaltenden Daten werden bei der ID angezeigt */
                for( var i = 0; i<len; i++){
                    var CID = response[i]['CID'];
                    var Datum = response[i]['Datum'];

                    $("#Teststart").append("<option value='"+Datum+"'>"+Datum+"</option>");

                }
            }
        });


    $("#TesterID").change(function(){ /* Wenn du änderst und vom Select Feld auswählst */
        var TesterID = $(this).val(); /* value der Tester erhalten */ 

        $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */

                var len = response.length;

                $("#Teststart").empty(); /* Die erhaltenden Daten werden bei der ID angezeigt */
                for( var i = 0; i<len; i++){
                    var CID = response[i]['CID'];
                    var Datum = response[i]['Datum'];

                    $("#Teststart").append("<option value='"+Datum+"'>"+Datum+"</option>");

                }
            }
        });
    });

});
$(文档).ready(函数(){
var TesterID=“”;/*测试仪erhalten*的值
$.ajax({/*ajax aufrufen)*/
url:'ma_get-TesterID.php',
键入:“get”,/*Methode zumübertragen der Daten*/
数据:{TesterID:TesterID},/*Daten zuübermitteln*/
数据类型:“json”,
成功:功能(响应){/*Die zurückgebenene Daten erhalten*/
var len=响应长度;
$(“#Teststart”).empty();/*在ID为angezeigt的情况下*/

对于(var i=0;i原始代码的几个问题:

A.第一个
ajax
必须在开始第二个
ajax
之前完成

您的第二个
ajax
调用需要第一个
ajax
调用返回的
Datum
值。目前,第二个
ajax
将在发送第一个
ajax
后立即启动,然后返回
Datum
。因此我们需要等待第一个
ajax
返回
Dat嗯
,然后我们可以使用它作为第二个
ajax
的输入

实现这一点的简单方法是使用ECMA2017(docs)的
async/await
功能。这允许javascript异步运行,并在继续之前等待完成某些操作

为此,我们需要首先将封闭函数声明为
async
(请参见下面代码中的注释//1):

然后我们在第一个
$(ajax)
调用前面添加
wait
(请参见下面代码中的注释//3):

javascript引擎将在第一次调用ajax时暂停代码,直到返回
Datum
值。然后它将继续正常运行

B.
基准
需要在封闭函数的顶层

如前所述,变量
Datum
仅存在于第一次
ajax
调用中归因于
“success”
的匿名函数中。因此,它不可用于第二次
ajax
调用(“Datum未定义”)

您可以通过将
Datum
声明为全局(在
$(ready){}
之外)来解决此问题,或者更好的方法是,您可以通过在最外层的括号中声明
$(ready){}
来将其保持在
$(ready){}
内(请参见下面代码中的注释)

最后,您应该将
var-Datum=response['Datum'];
替换为
Datum=response['Datum'];
(请参见下面代码中的注释)

/*在30分钟的时间内,测试人员在测试和测试中对数据进行循环记录
//1.在函数前面添加'ASYNC'
$(文档).ready(异步函数(){
//2.在顶部声明“基准”
var数据;
var TesterID=“”;/*测试仪erhalten*的值
//3.在第一个AJAX调用前添加wait
等待$.ajax({/*ajax aufrufen)*/
url:'ma_get-TesterID_Testende.php',
键入:“GET”,/*Methode zumübertragen der Daten*/
数据:{TesterID:TesterID},/*Daten zuübermitteln*/
数据类型:“json”,
成功:功能(响应){/*Die zurückgebenene Daten erhalten*/
var CID=响应['CID'];
//4.移除基准面前面的VAR
基准=响应[‘基准’];
},
错误:函数(jqxhtt、状态、异常){
console.log(异常);
警报('异常:',异常)
}
});
var TestaufstellungID=“”;
$.ajax({/*ajax aufrufen)*/
url:'ma_TestendeSQL.php',
键入:“get”,/*Methode zumübertragen der Daten*/
数据:{Testaufstellung:TestaufstellungID,Datum:Datum},/*Daten zuübermitteln*/
数据类型:“json”,
成功:函数(数据){/*Die zurückgebenene Daten erhalten*/
警报('已成功调用Datum='。Datum);
},
错误:函数(jqxhr、状态、异常){
警报('异常:',异常)
}
});
});

Ajax调用不是同步的,使用异步:false也不是首选的解决方案,因为它会生成警告。这里最简单的解决方案是创建两个方法。一个用于获取数据,另一个用于使用数据更新数据库。在第一个方法成功时调用第二个方法。因此

  $.ajax({ 

        url: 'ma_get-TesterID_Testende.php',
        type: 'get', 
        data: {TesterID:TesterID}, 
        dataType: 'json',
        success:function(response){ 


            var CID = response['CID'];
            var Datum = response['Datum'];

            SecondMethod(Datum);


        },

首先,您应该知道,您应该将JavaScript与生成HTML的HTML或PHP页面分开,以便可以缓存JavaScript。您还应该使用CSS进行缓存,以便更快地加载页面。下面是您的代码可能的样子:

/1){
对于(变量i=0,a,v,testerId,testaufstellungID,l=serialGet.length;i
/*external.css*/
*{
框大小:边框框;填充:0;边距:0;
}
html,正文{
宽度:100%;高度:100%;
}
身体{
背景:#ccc;
}
#试验{
填充:5px 7px;文本对齐:分
 await $.ajax({ /* AJAX aufrufen */
/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */ 

// 1. ADD 'ASYNC' IN FRONT OF FUNCTION

$(document).ready(async function(){

// 2. DECLARE 'DATUM' AT TOP

var Datum;
var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */ 

        // 3. ADD AWAIT IN FRONT OF FIRST AJAX CALL

        await $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID_Testende.php',
            type: 'GET', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */

                var CID = response['CID'];

                // 4. REMOVE VAR IN FRONT OF DATUM

                Datum = response['Datum'];

            },
             error: function(jqxhtt, status, exception) {
             console.log(exception);
         alert('Exception:', exception)

            }
        });




    var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
    $.ajax({ /* AJAX aufrufen */
        url: 'ma_TestendeSQL.php',
        type: 'get', /* Methode zum übertragen der Daten */
        data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
        dataType: 'json',
        success:function(data){ /* Die zurückgegebenene Daten erhalten */


            alert('Successfully called Datum='.Datum);
        },
        error: function(jqxhr, status, exception) {
            alert('Exception:', exception)

        }
    });

});
  $.ajax({ 

        url: 'ma_get-TesterID_Testende.php',
        type: 'get', 
        data: {TesterID:TesterID}, 
        dataType: 'json',
        success:function(response){ 


            var CID = response['CID'];
            var Datum = response['Datum'];

            SecondMethod(Datum);


        },
    await $.ajax({
    url: 'ma_get-TesterID_Testende.php',
    type: 'get',
    data: {TesterID:TesterID},
    dataType: 'json',
    success:function(response){ /* Die zurückgegebenene Daten erhalten */

    },
     error: function(jqxhtt, status, exception) {
    }
}
$.ajax({
    url: 'ma_TestendeSQL.php',
    type: 'get',
    data: {Testaufstellung:TestaufstellungID, Datum: Datum},
    dataType: 'json',
    success:function(data){

    },
    error: function(jqxhr, status, exception) {
    }
}
$.ajax({
    url: 'ma_get-TesterID_Testende.php',
    type: 'get',
    data: {TesterID:TesterID},
    dataType: 'json',
    success:function(response){
        $.ajax({
            url: 'ma_TestendeSQL.php',
            type: 'get',
            data: {Testaufstellung:TestaufstellungID, Datum: Datum},
            dataType: 'json',
            success:function(data){

            },
            error: function(jqxhr, status, exception) {
            }
        }
    },
     error: function(jqxhtt, status, exception) {
    }
}
$(document).ready(function() {
    $.ajaxSetup(
        {
         cache : false, 
         crossDomain: true, 
         async : false, 
         type : 'POST', 
         dataType : 'json'
        });

    function FirstAjax($url, $value){
        var def = new $.Deferred();
        var ret_data;

        $.post($url, {type : 1, value : { $value}}, function(data){
            //Do things with Data
            //or
            ret_dat=data;
        }, "json");

        return ret_data;
    }


    var abc = FirstAjax("site address", "data_values");
    var def = FirstAjax("site address", "data_values");
});