私の問題が何であるかを示す例を作成しました。コードを投稿してから説明します。
私のJS:
$('#mybtn').on('click', function(){
//$(fn1).promise().done(fn2);
$.Deferred(fn1).then(fn2);
});
function fn1(){
console.log("1");
$.ajax({
url: 'ajax.php',
type: 'POST',
data: {
func: "1"
},
success: function(data){
console.log(data);
}
});
}
function fn2(){
console.log("2");
$.ajax({
url: 'ajax.php',
type: 'POST',
data: {
func: "2"
},
success: function(data){
console.log(data);
}
});
}
私のPHP:
<?php
$request = $_POST['func'];
switch ($request) {
case '1':
fn1();
break;
case '2':
fn2();
break;
}
function fn1(){
print "1";
sleep(4);
}
function fn2(){
print "2";
sleep(2);
}
?>
だから、私は関数を呼び出してそれらが終了するのを待つためにこれらの2つの方法を試しました。$.Deferred(fn1).then(fn2); は 1, 2 の次に 2, 1 を出力します。1、1を出力して停止します。fn2を呼び出すことさえしないでください。出力したいのは1、1、2、2です。変数でajaxリクエストを返す問題を解決し、promise().doneを使用するだけですしかし、それはできません。関数を変更せずに待つ必要があります。それは可能ですか? 私はこのように意味します:
toWait.someWayToWait().then(anotherFunctionToWait());
function toWait(){
//whatever code or functions in here.
fn1();
fn2();
fnX();
}
function anotherFunctionToWait(){
//whatever code or functions in here.
}
ありがとうございました。