2017-04-20 14 views
1

パラメータを使用してHTTP POSTを送信する別の関数を呼び出す呼び出し元関数があります。今、私は、この成功した機能があるまで(HTTP POSTが完了したとき)、この関数が実行をブロックすることを望みます。Javascript:ブロッキングHTTP POSTを呼び出す

これは私の論理的なコードです:いくつかの単語で

var fingerprint = null; 
var janus_session = null; 
var inserted = "false"; 

$(document).ready(function() { 
     //stuff 
     fingerprint = FindFingerprint(jsep); 

     janus_session = janus.getSessionId(); 
     inserted = SendSDPLine(fingerprint, janus_session); 
     console.log("**in MAIN: inserted= " + inserted); 

     //other stuff 
    } 

function SendSDPLine(fingerprint, janus_session) { 
    var sdp = fingerprint; 
    // var url = "http://localhost:8484/Shine/AccountController"; 
    var action_type = "InsertSDPLine"; 
    var sessionid = janus_session; 

    $.ajax({ 
    type: "POST", 
    url: url, 
    xhrFields: { 
     withCredentials: false 
    }, 
    data: { 
     "action": action_type, 
     "sdpline": fingerprint, 
     "sessionid": sessionid 
    }, 
    success: function(data) { 
     if (data == "INSERTED") { 
     inserted = "true"; 
     console.log("in SENDSDPLINE: inserted= " + inserted); 
     } 
     return inserted; 
     //  return checkFingerprint (fingerprint); 
    }, 
    // vvv---- This is the new bit 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("Error, status = " + textStatus + ", " + 
        "error thrown: " + errorThrown); 
    } 
    }); 

} 

、私はHTTPのPOST応答が確認された後other stuffが実行されたことをしたいです。私はすでにもう一つの問題を見てきました:最初に、挿入されたfalse値があります。 HTTP POSTレスポンスの成功(データ)には、trueという値があります。しかし、呼び出し元関数では、console.logにはundefinedという値があります。

だから、私は2つの質問があります。

  1. HTTP POSTレスポンスが受信されるまで、呼び出し元の関数の実行を停止する方法
  2. 、呼び出し元の関数にこの値を返す方法を?
+1

おそらく、async/awaitがお手伝いします。しかしそうでない場合は、呼び出し元関数の実行を停止することは不可能であり、約束やコールバックの使用に頼る必要があります。 –

答えて

1

あなたはAJAXが戻るまで実行をブロックする必要がある場合は、jQuery documentationあたりとして、アヤックスのパラメータでasync:falseを指定することができます。

0

使用コールバック関数

var fingerprint = null; 
var janus_session = null; 
var inserted = "false"; 


$(document).ready(function() { 

//stuff 

fingerprint = FindFingerprint(jsep); 


janus_session = janus.getSessionId(); 

//Use callback funcion to access 
SendSDPLine(fingerprint,janus_session , function(error,inserted){ 

    if(error){ 
    console.log("**Error in : "+error); 
    } 

    console.log("**in MAIN: inserted= "+inserted); 


}); 


//other stuff 

} 

function SendSDPLine(fingerprint,janus_session, callback){ 

    var sdp=fingerprint; 
// var url = "http://localhost:8484/Shine/AccountController"; 
var action_type = "InsertSDPLine"; 
var sessionid = janus_session; 

$.ajax({ 
    type: "POST", 
    url:  url, 
    async: false, 
    xhrFields: { 
    withCredentials: false 
    }, 
    data:{ 
    "action"  : action_type, 
    "sdpline"  : fingerprint, 
    "sessionid" : sessionid 
    }, 
    success: function(data) { 
    if (data == "INSERTED") { 
     inserted = "true"; 
     console.log("in SENDSDPLINE: inserted= "+inserted); 

     //return result 
     return callback(null, inserted); 
    } 



     //  return checkFingerprint (fingerprint); 

    }, 
    // vvv---- This is the new bit 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("Error, status = " + textStatus + ", " + 
     "error thrown: " + errorThrown 
     ); 

     //return error 
     return callback(errorThrown, null); 
    } 
    }); 

} 
関連する問題