Javascript jQuery在后台运行,但不在前台运行
我有一段代码:Javascript jQuery在后台运行,但不在前台运行,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,我有一段代码: if(!加密状态){ 如果(cKey==“”| cKey==null){ cKey=getKey(aid);//这里我们尝试获取密钥 如果(cKey!=“”&&cKey!=null&&cKey!=未定义){ if(isJSON(jKey)&&encryption_状态){ var tjKey=JSON.parse(jKey); tjKey[aid]=cKey; jKey=JSON.stringify(tjKey); }否则{ jKey=json.stringify({aid:c
if(!加密状态){
如果(cKey==“”| cKey==null){
cKey=getKey(aid);//这里我们尝试获取密钥
如果(cKey!=“”&&cKey!=null&&cKey!=未定义){
if(isJSON(jKey)&&encryption_状态){
var tjKey=JSON.parse(jKey);
tjKey[aid]=cKey;
jKey=JSON.stringify(tjKey);
}否则{
jKey=json.stringify({aid:cKey});
}
加密状态=真;
}
}
如果(!加密状态){
如果(cKey==“”| cKey==null){
cKey=rndstr(32);//生成字符串
}
var arr={};
if(isJSON(jKey))arr=JSON.parse(jKey);
arr[aid]=cKey;
jKey=JSON.stringify(arr);
加密状态=真;
}
}
一般来说,ajax调用是异步的。也就是说,像这样的序列
var a = 0;
a = getAwithAjaxFromServer(...);
console.log(a);
将在ajax仍在运行时立即打印“0”
必须将cley
和encryption\u state
的整个逻辑置于done
功能中:
if(!encryption_state){
if(cKey=="" || cKey==null){
cKey=getKey(aid);
}
}
在您的ajax中:
function getKey(kaid){
$.ajax({
method: "POST",
url: "/?mod=key&fnc=syncKey",
data: {
aid: kaid
},
done: function(data) {
var tret = (JSON.parse(data)['msg']);
.... PUT ALL THE LOGIC HERE .....
}
});
}
通常,ajax调用是异步的。也就是说,像这样的序列
var a = 0;
a = getAwithAjaxFromServer(...);
console.log(a);
将在ajax仍在运行时立即打印“0”
必须将cley
和encryption\u state
的整个逻辑置于done
功能中:
if(!encryption_state){
if(cKey=="" || cKey==null){
cKey=getKey(aid);
}
}
在您的ajax中:
function getKey(kaid){
$.ajax({
method: "POST",
url: "/?mod=key&fnc=syncKey",
data: {
aid: kaid
},
done: function(data) {
var tret = (JSON.parse(data)['msg']);
.... PUT ALL THE LOGIC HERE .....
}
});
}
您必须理解javascript中的异步机制才能继续调用ajax。有很多资源和问题。例如: 因此,您可以将代码转换为:
if(!encryption_state){
var serverKeyCallback = function(cKey) {
if(cKey!="" && cKey!=null && cKey!=undefined){
if(isJSON(jKey) && encryption_state){
var tjKey = JSON.parse(jKey);
tjKey[aid] = cKey;
jKey = JSON.stringify(tjKey);
}else{
jKey = json.stringify({aid: cKey});
}
encryption_state=true;
}
};
var localKeyCallback = function(cKey) {
if(!encryption_state){
if(cKey=="" || cKey==null){
cKey=rndstr(32); //generate string
}
var arr = {};
if(isJSON(jKey)) arr = JSON.parse(jKey);
arr[aid] = cKey;
jKey = JSON.stringify(arr);
encryption_state = true;
}
}
manageKey(cKey, aid, serverKeyCallback, localKeyCallback);
}
function manageKey(cKey, kaid, serverKeyCallback, localKeyCallback) {
if(cKey=="" || cKey==null) {
$.ajax({
method: "POST",
url: "/?mod=key&fnc=syncKey",
data: {
aid: kaid
},
done: function(data) {
var tret = (JSON.parse(data)['msg']);
serverKeyCallback(tret);
localKeyCallback(tret);
}
});
}
else {
localKeyCallback(cKey);
}
}
定义两段封装的代码,一段在serverResponse之后执行,另一段在serverResponse之后或在本地存储cKey时执行。我还没有测试代码,但它必须像您预期的那样工作。您必须了解javascript中的异步机制才能继续调用ajax。有很多资源和问题。例如: 因此,您可以将代码转换为:
if(!encryption_state){
var serverKeyCallback = function(cKey) {
if(cKey!="" && cKey!=null && cKey!=undefined){
if(isJSON(jKey) && encryption_state){
var tjKey = JSON.parse(jKey);
tjKey[aid] = cKey;
jKey = JSON.stringify(tjKey);
}else{
jKey = json.stringify({aid: cKey});
}
encryption_state=true;
}
};
var localKeyCallback = function(cKey) {
if(!encryption_state){
if(cKey=="" || cKey==null){
cKey=rndstr(32); //generate string
}
var arr = {};
if(isJSON(jKey)) arr = JSON.parse(jKey);
arr[aid] = cKey;
jKey = JSON.stringify(arr);
encryption_state = true;
}
}
manageKey(cKey, aid, serverKeyCallback, localKeyCallback);
}
function manageKey(cKey, kaid, serverKeyCallback, localKeyCallback) {
if(cKey=="" || cKey==null) {
$.ajax({
method: "POST",
url: "/?mod=key&fnc=syncKey",
data: {
aid: kaid
},
done: function(data) {
var tret = (JSON.parse(data)['msg']);
serverKeyCallback(tret);
localKeyCallback(tret);
}
});
}
else {
localKeyCallback(cKey);
}
}
定义两段封装的代码,一段在serverResponse之后执行,另一段在serverResponse之后或在本地存储cKey时执行。我还没有测试代码,但是它必须按照您的预期工作。尝试向ajax请求添加“上下文:此”也可以告诉我们您在网络选项卡中有哪些内容吗?ajax调用是异步的,因此您不能从
getKey
函数返回值尝试向ajax请求添加“上下文:此”也可以告诉我们您在网络选项卡中有哪些内容吗ajax调用是异步的,因此不能从getKey
函数返回值