2011-05-19 189 views
0

尝试从getUrl函数获取返回值,但返回值为undefined。
我将不胜感激任何帮助。函数返回值返回undefined

感谢
下面是代码:

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

你有一个具体的问题,但你粘贴了一大块代码。请尽量重现,以便更快得到正确答案。这也将帮助你自己调试它更容易 – 2011-05-19 16:23:13

回答

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

它返回funcion代码的所有代码doQueryResults(r)我希望它返回url = url.nodeValue;谢谢 – Noe 2011-05-19 16:09:33

+0

得到它的工作http://stackoverflow.com/questions/6060902/return-value-to-function-within-a-function – Noe 2011-05-19 16:22:56

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; 
}