返回值以在函数内运行

时间:2011-05-19 15:16:47

标签: javascript

尝试从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;
            }           
        }   
    }
}   

5 个答案:

答案 0 :(得分:3)

  

AJAX是异步的

好像你在getURL内发出了一个AJAX请求。

请记住,默认情况下,AJAX请求是异步。这意味着当您致电getURL时,代码会立即执行 ,而不是等待AJAX​​响应。

任何依赖于响应的代码都需要在回调AJAX请求时完成。

好像你的回调函数是doQueryResults。将alert()放在该函数中,它应该触发。

答案 1 :(得分:2)

内部函数未激活,因此运行testOne()不会执行任何操作。如果要运行它,请使用:

  function testOne() {
   (function inside() {
      //some other code
      (function anotherOne() {
          var nurl = getUrl("firstLink");
          alert(nurl);
      })();
   })()
  }
  testOne();

甚至

function testOne() {
   //some other ocde
   return function inside() {
      //some other code
       return function anotherOne() {
          var nurl = getUrl("firstLink");
          alert(nurl);
      };
   }
}
testOne()()();

但也许你应该问自己:有什么用? :d

答案 2 :(得分:1)

似乎适合我。看我的小提琴:http://jsfiddle.net/nBTLB/

答案 3 :(得分:0)

没有问题,你的功能是在另一个中定义的

但似乎getUrl是在testOne之后定义的 也许它还没有被anotherOne调用时定义?

答案 4 :(得分:0)

唯一可以获得未定义的方法是使用“firstLink”以外的参数调用getUrl。 此外,当提供的参数不是“firstLink”时,方法getUrl应该有一个带有替代返回的else语句