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;
}
精彩评论