开发者

return value from function returns undefined

开发者 https://www.devze.com 2023-03-07 05:50 出处:网络
Trying to get a return value from getUrl function but it comes back as undefined. I would appreciate any help.

Trying to get a return value from getUrl function but it comes back as undefined.

I would appreciate any help.

Thanks

Here is the code:

    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, 
        he开发者_开发百科ight: 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;
            }           
        }   
    }
}   


you are returning the interior function but nothing from the getURL function.

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


I think you are making an ajax request in getUrl method and doQueryResults is the callback to ajax method which handles the response.

The problem is here, the ajax call is made asynchronously and javascript does not wait for execute it completely and move on next to execute other code mentioned in function.

in your code, where you invoked the getUrl

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

you need to use ajax callback to use response. Following code may help you

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


js function will not return anything from the for loop, you need to init a temp carrier,

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

Do like this

function youFunction (){
    var carrier;
    for(){
        if(true){
            carrier = value; 
            return false; //end the loop
        }
    }
    return carrier;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消