我可以在另一个AJAX请求中放置一个AJAX请求吗?

时间:2017-12-28 07:40:58

标签: jquery ajax

我试图在一个模态中将数据显示到数据库中的不同表。由于在一个AJAX请求中无法发送两个url,我决定在AJAX请求中发送另一个AJAX请求。这是我的代码:

$.ajax({
        url:"getEvent.php",
        method: "GET",
        data:{
            cid:event_id
        },
        dataType: "json",

        success:function(retval){
            $("#event_img").html("");
            $("#event_title").html("");
            $("#event_description").html("");
            $("#event_start").html("");
            $("#event_material_req").html("");
            $("#event_occupation").html("");

            $.ajax({
                url: "getOccupation.php",
                method: "GET",
                data:{
                    cid:event_id
                },
                dataType: "json"
                success: function(retval){
                    for(i=0; i<retval.length; i++){
                        event_occupation = retval[i].noVolunteers;
                        event_occupation += retval[i].occupationName;
                    }

                    $("#event_occupation").append(event_occupation);

                }
            });



            event_img = "../admin/eventImages/"+retval[0].event_img;
            event_id = retval[0].event_id;
            event_name = retval[0].event_name;
            event_description = retval[0].event_description;
            event_location = retval[0].event_location;
            event_start = moment().format('MMMM Do YYYY, h:mm a', retval[0].event_start);
            event_material_req = retval[0].event_material_req;


            $("#event_img").attr("src", event_img);
            $("#event_title").append(event_name);
            $("#event_description").append(event_description);
            $("#event_start").append(event_start);
            $("#event_material_req").append(event_material_req);
            $("#readmore").modal("show");

            publishToPast(event_id);
        }

    });

我知道我没有做对,因为我唯一可以检索的是来自getEvent.php

1 个答案:

答案 0 :(得分:0)

我的代码中没有任何问题。但我也无法理解:)

在这两个ajax调用之前你有event_id。那你为什么要把你的第二个ajax放在第一个?

因为我认为您可能需要第二次通话中第一次通话的结果。 (但是你没有使用任何结果进行第二次调用)所以我们只想让你想同步显示一些数据。首先获得第一个电话并显示它然后接到第二个电话并显示其他信息。

确定。这里的要点是在两次调用中都将回调值设为retval

然后您将所有UI代码放在第二个调用之外。我的意思是这部分

 event_img = "../admin/eventImages/"+retval[0].event_img;
            event_id = retval[0].event_id;
            event_name = retval[0].event_name;
            event_description = retval[0].event_description;
            event_location = retval[0].event_location;
            event_start = moment().format('MMMM Do YYYY, h:mm a', retval[0].event_start);
            event_material_req = retval[0].event_material_req;


            $("#event_img").attr("src", event_img);
            $("#event_title").append(event_name);
            $("#event_description").append(event_description);
            $("#event_start").append(event_start);
            $("#event_material_req").append(event_material_req);
            $("#readmore").modal("show");

            publishToPast(event_id);

所以它不尊重你在第二次通话中的成功回调,并在它结束之前显示它,并且只有当呼叫1成功通话时才显示。

另一件事是你在第二次调用中有语法错误。

url: "getOccupation.php",
                method: "GET",
                data:{
                    cid:event_id
                },
                dataType: "json"
                success: function(retval){

你忘记了“json”之后的,。它应该是这样的

 url: "getOccupation.php",
                    method: "GET",
                    data:{
                        cid:event_id
                    },
                    dataType: "json",
                    success: function(retval){