3

2 つの ajax 呼び出しがありますが、何らかの理由で ajax の 1 つが計画どおりに機能していません。

1 つの ajax 呼び出しがサイトからデータを取得しajax1.php、次に別の ajax がデータを取得しajax2.php、その中のデータを変更することになっていますajax1.php

だから私は持っていindex.phpて、ajaxはこのようになります

これはindex.php次のとおりです。

    $.ajax({
        type: "GET",
        data: "id="+id+"&id-other="+id-other,
        url: "ajax1.php"
    }).done(function(data){
        $("#div").html(data);

    });

    $.ajax({
        type: "GET",
        data: "id_1="+id+"&id_2="+id_2,
        url:"ajax/ajax2.php"
    }).done(function(data){
        $("#change_data").html(data);

    });

<div id="div">
<div id="change_data"><!-- This div is supposed to be in ajax1.php so it only appears after the first ajax is done.!--></div>
</div>

問題は #change_data が正しく表示されないことです。一瞬何をすべきかを示し、その後消えます。何が問題なのかわからない。遅延を入れてみました:$("#change_data").delay.(1000).html(data_changed);そのようですが、うまくいきません。最初の .done() ajax 関数内に ajax 関数全体を入れようとしましたが、うまくいきません。

これは、最初の ajax がロードされるときに、2 番目の ajax が最初の ajax よりも速くロードしようとすることが原因である可能性があります。最初の ajax にはより多くの情報が含まれているため、ロードに時間がかかる場合があります。

何か案は?ありがとう たぶん、最初の ajax 内に 2 番目の ajax を配置する別の方法があるので、成功すると、2 番目の ajax が呼び出されますか?

4

2 に答える 2

8

たぶん、2番目のajaxを最初のajaxに入れる別の方法があるので、成功すると2番目のajaxが呼び出されますか?

はいあります:

$.ajax({
    type: "GET",
    data: "id="+id+"&id-other="+id-other,
    url: "ajax1.php"
}).done(function(data){
    $("#div").html(data);
    $.ajax({
        type: "GET",
        data: "id_1="+id+"&id_2="+id_2,
        url:"ajax/ajax2.php"
    }).done(function(data){
        $("#change_data").html(data);
    });
});
于 2012-04-28T03:05:21.033 に答える
3

$.ajax 呼び出しは非同期であるため、最初の呼び出しが 2 番目の呼び出しまでに完了するとは限りません。次のように、最初の呼び出しのコールバック内で 2 番目の呼び出しを行う必要があります。

$.ajax({
        type: "GET",
        data: "id="+id+"&id-other="+id-other,
        url: "ajax1.php"
    }).done(function(data){
        $("#div").html(data);


        $.ajax({
           type: "GET",
           data: "id_1="+id+"&id_2="+id_2,
           url:"ajax/ajax2.php"
        }).done(function(data){
           $("#change_data").html(data);
        });

});
于 2012-04-28T03:09:51.260 に答える