0

コードは私には問題ないように見えるため、 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;
    }

}
4

2 に答える 2

0

変数は別のスコープに存在します。無名関数で宣言されている

function Savedat(){

    // [ Code .. ]

    j$('[name="p+Q]').each(

        function(){

            // [ Code.. ]

            G_SResult = 999;
            // G_SResult didnt exist and is therefore declared locally.
            // It implies "var G_SResult = 999"
        }
    );

    // G_SResult undefined here.. because it is outside the scope where it was defined.
}

そして、Savedat(){}関数には存在しません

于 2012-11-27T20:39:09.323 に答える
0

Visualforce.remoting.Managerメソッドは非同期のようです。

于 2012-11-27T20:39:16.973 に答える