Javascript 函数的返回值返回未定义的值

Javascript 函数的返回值返回未定义的值,javascript,jquery,Javascript,Jquery,试图从getUrl函数中获取返回值,但返回值未定义。 我将感谢任何帮助 谢谢 代码如下: function createXmlFicaRsi(xmlDoc,xmlFileName) { var mystr = "<?xml version='1.0' encoding='utf-8'?><result><rows>"+strStor+"</rows></result>" jQuery(document)

试图从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;
            }           
        }   
    }
}   
函数createXmlFicaRsi(xmlDoc,xmlFileName){
var mystr=”“+strStor+“”
jQuery(文档).ready(函数(){
jQuery(“#fRsiGrid”).jqGrid({
数据类型:“xmlstring”,
datastr:mystr,
colNames:[“年”、“收入”、“金额
需要
1个QC'、“金额
需要
4个QC'、“
QCs的”、“FRA下的每月
”、“FRA下的年度
”、“FRA下的每月
年度
”、“FRA的
年度”、“FRA下的
年度”、“YOC*、“1977年后的
, colModel:[ {名称:'yearRsi',索引:'yearRsi',宽度:55,可调整大小:false,对齐:'center',排序类型:'int'}, {name:'earnRsi',index:'earnRsi',宽度:65,可调整大小:false,align:'right',可排序:false}, {名称:'1qcRsi',索引:'1qcRsi',宽度:65,可调整大小:false,对齐:'right',可排序:false}, {名称:'4qcRsi',索引:'4qcRsi',宽度:65,可调整大小:false,对齐:'right',可排序:false}, {name:'numqcRsi',index:'numqcRsi',宽度:40,可调整大小:false,align:'right',可排序:false}, {名称:'mfra',索引:'mfra',宽度:65,可调整大小:false,对齐:'right',可排序:false}, {名称:'yfra',索引:'yfra',宽度:65,可调整大小:false,对齐:'right',可排序:false}, {name:'myafra',index:'myafra',宽度:85,可调整大小:false,align:'right',可排序:false}, {名称:'yafra',索引:'yafra',宽度:65,可调整大小:false,对齐:'right',可排序:false}, {名称:'yoc',索引:'yoc',宽度:65,可调整大小:false,对齐:'right',可排序:false}, {名称:'sumpost',索引:'sumpost',宽度:60,可调整大小:false,对齐:'right',可排序:false}, rowNum:-1, 希德格里德:错, 宽度:760, 身高:460, shrinkToFit:错, 描述:“1977年后FICA收入、QC、AET和YOC金额” }); $('.uijqgrid.uith column').css('height','40px'); $('.ui jqgrid.ui jqgrid htable th div').css('height','40px'); $('.ui jqgrid title').css('font-size','.8em');//标题的字体大小 $('.ui jqgrid.ui th column').css('font-size','.7em');//标题内容的字体大小 $('fRsiGrid'u caption')。追加(“*”); }); $('jqgh_1qcRsi').addClass(“网格链接”); $('jqgh_4qcRsi').addClass(“网格链接”); $('jqgh_mfra').addClass(“网格链接”); $('jqgh_yfra').addClass(“网格链接”); $('jqgh_myafra').addClass(“网格链接”); $('jqgh_yafra').addClass(“网格链接”); $('jqgh_yoc').addClass(“网格链接”); $(“#jqgh_1qcRsi”)。单击(函数(){ var nurl=getUrl(“QueryView QC”); 警报(nurl); }); } 函数getUrl(urlNm){ DWREngine.\u execute(\u ajaxConfig.\u cfscriptLocation,null,'getUrls',urlNm,doQueryResults); 函数doQueryResults(r){ xmlDoc=loadXMLString(r); y=xmlDoc.getElementsByTagName(“URL”); 对于(i=0;i
您正在返回内部函数,但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;
}
函数getUrl(urlNm){
DWREngine.\u execute(\u ajaxConfig.\u cfscriptLocation,null,'getUrls',urlNm,doQueryResults);
var returnVal=函数doQueryResults(r){
xmlDoc=loadXMLString(r);
y=xmlDoc.getElementsByTagName(“URL”);
对于(i=0;i
我认为您正在getUrl方法中发出ajax请求,doQueryResults是对ajax方法的回调,该方法处理响应

这里的问题是,ajax调用是异步进行的,javascript不会等待完全执行它,然后继续执行函数中提到的其他代码

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;
}
在代码中,调用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);
}
函数getUrl(urlNm){
DWREngine.\u execute(\u ajaxConfig.\u cfscriptLocation,null,'getUrls',urlNm,doQueryResults);
函数doQueryResults(r){
xmlDoc=loadXMLString(r);
y=xmlDoc.getElementsByTagName(“URL”);
对于(i=0;i
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;
}

它将返回Function code doQueryResults(r)中的所有代码。我希望它返回url=url.nodeValue;感谢它能正常工作。您有一个特定的问题,但粘贴了大量代码。请尽量少地复制它,以更快地得到一个好的答案。这也将有助于您自己调试它