Javascript:调用阻塞HTTP POST
我有一个调用函数,它调用另一个函数,该函数发送带有参数的HTTP POST。现在我想让这个被调用的函数阻塞执行,直到它“成功”(当它的HTTP POST完成时) 这是我的逻辑代码:Javascript:调用阻塞HTTP POST,javascript,jquery,http,Javascript,Jquery,Http,我有一个调用函数,它调用另一个函数,该函数发送带有参数的HTTP POST。现在我想让这个被调用的函数阻塞执行,直到它“成功”(当它的HTTP POST完成时) 这是我的逻辑代码: var fingerprint = null; var janus_session = null; var inserted = "false"; $(document).ready(function() { //stuff fingerprint = FindFingerprint(jse
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响应之后执行其他内容。我已经看到了另一个问题:最初,inserted具有false
值。在HTTP POST响应的成功(数据)中,它具有true
值。但是,在调用者函数中,在下面的控制台中.log
具有未定义的值
所以,我有两个问题:
如何将此值返回给调用者函数
如何在收到HTTP POST响应之前停止调用方函数的执行
使用回调函数
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);
}
});
}
如果需要在AJAX返回之前阻止执行,可以在AJAX参数中指定async:false
,如。async/await可能会在这里帮助您。但如果不是,那么就不可能(停止调用方函数的执行),您必须求助于使用承诺或回调。