コードは私には問題ないように見えるため、 G_SResult 変数がスコープを失うことに混乱しています。ready 関数の上でグローバルに宣言されていますが、スクリーンショットには表示されていません。スクリーンショットでは、強調表示された 4 つのアラート式が表示されます。赤い点が付いているものは、未定義を返す場所です。他のアラートは正しい値を返します。
コードのスクリーンショット.----> http://i.imgur.com/nNIBk.png
function Savedat(){
var Surveyz=new Survey();
Surveyz.Name=j$('#survey_name').val();
var SResult;
var QuestionOrder=1;
var id;
//alert(G_SResult+'----first');
//alert(typeof G_SResult === 'undefined');
Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.SV_CreateSurvey.insertSurvey}'
,Surveyz
,function(Survey_result, event){
console.log(Survey_result);
SResult=Survey_result;
j$('[name="p_Q"]').each(function(){
elId=this.id;
var elNum=elId.substring(1);
QType=j$('input[name=ctrlSel'+elNum+']:checked').val();
Quest=new Question();
Quest.Question__c=j$(this).val();
Quest.Question_Input_Type__c=QType;
SResult=Survey_result;
G_SResult=SResult;
alert(G_SResult+'---1');
Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.SV_CreateSurvey.insertQuestion}'
,Quest
,function(Question_result, event){
console.log(Question_result);
var SQLink=new SurveyQL();
SQLink.SG_Survey__c=SResult;
SQLink.Survey_Question__c=Question_result;
SQLink.QOrder__c=(QuestionOrder);
Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.SV_CreateSurvey.insertSurveyLink}'
,SQLink
,function(SurveyLink_result, event){
console.log(SurveyLink_result);
});
j$('[name="A'+elNum+'"]').each(function(){
SA=new SurveyAnswer();
SA.Answer__c=j$(this).val();
SA.Survey_Question__c=Question_result;
Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.SV_CreateSurvey.insertAnswer}'
,SA
,function(Answer_result, event){
console.log(Answer_result);
});
});
QuestionOrder++;
});
alert(G_SResult+'----2');
});
alert(G_SResult+'----3');
});
setTimeout(function(){Work();}, 1000);
}
何らかの理由で誰かがこれに遭遇した場合、解決策はこれでした... (両方のコードブロックは実際の例として編集されています)
function Work()
{
//Semaphore like
if (typeof G_SResult === 'undefined')//(G_SResult == undefined)
{
//run stuff here
setTimeout(function(){Work();}, 1000);
}
else
{
alert(G_SResult+'----5');
//G_SResult = null;
}
}