2011-05-19 13 views
0

getUrl関数から戻り値を取得しようとしましたが、定義されていません。
私は助けていただければ幸いです。ここで関数から返される値が未定義を返します

おかげ
はコードです:

function createXmlFicaRsi(xmlDoc,xmlFileName) {  
    var mystr = "<?xml version='1.0' encoding='utf-8'?><result><rows>"+strStor+"</rows></result>" 
    jQuery(document).ready(function(){ 
     jQuery("#fRsiGrid").jqGrid({ 
     datatype: 'xmlstring', 
     datastr : mystr, 
     colNames:['Year','Earnings', 'Amt<br/>Needed <br/>1 QC','Amt<br/>Needed <br/>4 QC','#<br/>of<br/> QCs','Monthly<br/>Under FRA','Yearly<br/>Under FRA','Monthly<br/> Yearly of<br/> Attain.<br/> FRA','Year of<br/> Attain. of<br/> FRA','YOC*','Sum of<br/>Post-1977<br/>YOCs'], 
     colModel :[ 
      {name:'yearRsi', index:'yearRsi', width:55, resizable:false, align:'center', sorttype:'int'}, 
      {name:'earnRsi', index:'earnRsi', width:65, resizable:false, align:'right', sortable:false}, 
      {name:'1qcRsi', index:'1qcRsi', width:65, resizable:false, align:'right', sortable:false}, 
      {name:'4qcRsi', index:'4qcRsi', width:65, resizable:false, align:'right', sortable:false}, 
      {name:'numqcRsi', index:'numqcRsi', width:40, resizable:false, align:'right', sortable:false}, 
      {name:'mfra', index:'mfra', width:65, resizable:false, align:'right', sortable:false}, 
      {name:'yfra', index:'yfra', width:65, resizable:false, align:'right', sortable:false}, 
      {name:'myafra', index:'myafra', width:85, resizable:false, align:'right', sortable:false}, 
      {name:'yafra', index:'yafra', width:65, resizable:false, align:'right', sortable:false}, 
      {name:'yoc', index:'yoc', width:65, resizable:false, align:'right', sortable:false},   
      {name:'sumpost', index:'sumpost', width:60, resizable:false, align:'right', sortable:false} ],  
     rowNum:-1,  
     hidegrid: false, 
     width: 760, 
     height: 460, 
     shrinkToFit: false,   
     caption: '<span id=fRsiGrid_caption>FICA Earnings, QC, AET and YOC amounts after 1977</span>'  
     });  

     $('.ui-jqgrid .ui-th-column').css('height', '40px'); 
     $('.ui-jqgrid .ui-jqgrid-htable th div').css('height', '40px'); 
     $('.ui-jqgrid-title').css('font-size', '.8em');//Font size for title 
     $('.ui-jqgrid .ui-th-column').css('font-size', '.7em');//Font size for header content 
     $('#fRsiGrid_caption').append("<span id='whatLink' style='font-size:large;color:blue;text-decoration:none;cursor:pointer'>*</span>");  

    }); 
    $('#jqgh_1qcRsi').addClass("gridLink"); 
    $('#jqgh_4qcRsi').addClass("gridLink"); 
    $('#jqgh_mfra').addClass("gridLink"); 
    $('#jqgh_yfra').addClass("gridLink"); 
    $('#jqgh_myafra').addClass("gridLink"); 
    $('#jqgh_yafra').addClass("gridLink"); 
    $('#jqgh_yoc').addClass("gridLink"); 

    $("#jqgh_1qcRsi").click(function() { 
     var nurl = getUrl("QueryView-QC"); 
     alert(nurl);   
    }); 
} 

    function getUrl(urlNm){ 
    DWREngine._execute(_ajaxConfig._cfscriptLocation, null, 'getUrls', urlNm, doQueryResults); 
    function doQueryResults(r){  
     xmlDoc = loadXMLString(r);  
     y = xmlDoc.getElementsByTagName("URL"); 

     for (i = 0; i < y.length; i++) {    
      url = y[i].attributes.getNamedItem("val").nodeValue;    
      if (url == urlNm) 
      {       
       url = y[i].childNodes[0]; 
       //alert(url.nodeValue); 
       url = url.nodeValue; 
       return url; 
      }   
     } 
    } 
} 
+0

が好きですか、一時キャリアを初期化する必要がありますあなたは巨大なコードを貼り付けました。良い答えをより速く得るために最小限に再現してください。それはあなた自身で簡単にデバッグするのにも役立ちます –

答えて

2

あなたがのgetURL関数から内部機能が、何も戻ってきています。

function getUrl(urlNm){ 
DWREngine._execute(_ajaxConfig._cfscriptLocation, null, 'getUrls', urlNm, doQueryResults); 
var returnVal = function doQueryResults(r){  
    xmlDoc = loadXMLString(r);  
    y = xmlDoc.getElementsByTagName("URL"); 

    for (i = 0; i < y.length; i++) {    
     url = y[i].attributes.getNamedItem("val").nodeValue;    
     if (url == urlNm) 
     {       
      url = y[i].childNodes[0]; 
      //alert(url.nodeValue); 
      url = url.nodeValue; 
      return url; 
     }   
    } 
    } 
    return returnVal; 
} 
+0

関数コードからすべてのコードを返していますdoQueryResults(r)url = url.nodeValue;を返すようにします。おかげで – Noe

+0

は動作するようになったhttp://stackoverflow.com/questions/6060902/return-value-to-function-within-a-function – Noe

0

私はあなたがgetUrlメソッドでは、AJAX要求を行っているとdoQueryResultsが応答を処理するAjaxのメソッドへのコールバックだと思います。

問題はここでは、非同期にajax呼び出しが行われ、javascriptは関数を完全に実行するのを待たずに、次に関数に記述されている他のコードを実行します。あなたがのgetURL

var nurl = getUrl("QueryView-QC"); // getUrl will trigger the ajax request and return nothing ie. undefined so the nurl is undefined. 

を呼び出したコード内

は、あなたが応答を使用するようにAjaxのコールバックを使用する必要があります。次のコードは、あなたが

function getUrl(urlNm){ 
DWREngine._execute(_ajaxConfig._cfscriptLocation, null, 'getUrls', urlNm, doQueryResults); 
      function doQueryResults(r){  
       xmlDoc = loadXMLString(r);  
       y = xmlDoc.getElementsByTagName("URL"); 

       for (i = 0; i < y.length; i++) {    
        url = y[i].attributes.getNamedItem("val").nodeValue;    
        if (url == urlNm) 
        {       
         url = y[i].childNodes[0]; 
         //alert(url.nodeValue); 
         url = url.nodeValue; 

         // perform your stuff with url 
         doWithUrl(url); 
        }   
       } 
      } 

// function to handle the url 
function doWithUrl(url){ 
alert(url); 
} 
0

jsの関数がforループから何かを返しません役立つこと、あなたは

function youFunction(){ 
    for(){ 
     if(true){ 
      return value; //wrong 
     } 
    } 
} 

はあなたが持っているこの

function youFunction(){ 
    var carrier; 
    for(){ 
     if(true){ 
      carrier = value; 
      return false; //end the loop 
     } 
    } 
    return carrier; 
} 
関連する問題