2017-09-06 15 views
1

結果をログファイルに追加するpythonファイルがあり、このログをUIで同期的に出力する必要があります。続き最初のajax関数が完了するまで、再帰的にajax関数を呼び出します。

は私が私の最初のAJAX呼び出しが完了した後に1に設定されているフラグ変数を、使用している、私のコードここ

var flag = 0; 
function write_log_in_file(){ 
    var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://localhost/build5/builds/test.py", 
    "method": "POST", 
    "headers": { 
     "cache-control": "no-cache" 
    } 
    } 
    $.ajax(settings).done(function (response) { 
    flag =1; 
    console.log(response); 
    }); 
}; 

function get_log_from_file(){ 
    var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://localhost/build5/builds/build.log", 
    "method": "GET", 
    "headers": { 
     "cache-control": "no-cache" 
    } 
    } 
    $.ajax(settings).done(function (response) { 
    console.log(response); 
    }); 
}; 

//Write build log in build.log file 
write_log_in_file(); 

//Get log until python call is completed 
while(!flag){ 
    get_log_from_file(); 
} 

です。それまでは、私の2番目のajax呼び出しは再帰的に呼び出されています。

私はwhileを使っているので、フラグ変数は決して1になり、whileは無限ループに入りません。

他の方法があります。私は再帰的に私のajax関数を呼び出すことができますが、他のajax関数は完了していますか?

+0

"python"タグはPythonとは関係がないため削除されました。 –

答えて

0

ユーリーの答えは約束を使用する細かいアプローチである(あなたがそれになります)

しかし、あなたのコードの問題は、JQuery's ajaxには文書化さの.done方法がないことです。 .successを使用する必要があります。

$.ajax(settings) 
    .success(function (response) { 
    flag = 1; 
    console.log(response); 
    }) 
    .error(function(err) { 
    flag = -1; // End your while loop? 
    }); 
+0

これは完璧なものですが、**。done **メソッドはドキュメントに記載されています。 – Abhaya

1

$.ajaxは、あなたが結ぶことができる約束を返します。

function write_log_in_file(){ 
    var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://localhost/build5/builds/test.py", 
    "method": "POST", 
    "headers": { 
     "cache-control": "no-cache" 
    } 
    } 
    return $.ajax(settings) // return a promise 
}; 

function get_log_from_file(){ 
    var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://localhost/build5/builds/build.log", 
    "method": "GET", 
    "headers": { 
     "cache-control": "no-cache" 
    } 
    } 
    return $.ajax(settings) // return a promise 
}; 

//Write build log in build.log file 
write_log_in_file() 
    .then(function(result) { 
    console.log(result) // log write result 

    return get_log_from_file() // launch read 
    }) 
    .then(function(result) { 
    console.log(result) // log read result 
    }) 
    .catch(function(error) { 
    console.error(error); 
    }); 
関連する問題