переменная не содержит функцию

У меня есть переменная, которая получает значение из функции. Функция содержит 2 PageMethods. Внутри функции все работает отлично, но переменная dsrt содержит "Undefined". Кто-нибудь может сказать мне, почему функция не возвращает никакого значения?

dsrt = calculate_all_rates(ratetypes.Day1_Rate, ddlccy.options[ddlccy.selectedIndex].value, ses, ccytype.ID, ((ddltype.options[ddltype.selectedIndex].text == "Export") ? postyp.Export : postyp.Import), dt, mat2, mat2, ddlpf.options[ddlpf.selectedIndex].value, 0, 0, 0, "", ddlbank.options[ddlbank.selectedIndex].value);

function calculate_all_rates(rateid, ccy1,ccy2,ctyp,typ,posdt,matdt1,matdt2,pfid,mar,mar1,mar2 ,caltyp,bnk ) {
    var rds = new Array();
    var para = new Array();
    para[0] = rateid;
    para[1] = ccy1;
    para[2] = ccy2;
    para[3] = ((ctyp == 1) ? "ID" : "NAME");
    para[4] = ((typ == 1) ? "Export" : "Import");
    para[5] = posdt;
    para[6] = matdt1;
    para[7] = matdt2;
    para[8] = pfid;
    para[9] = mar;
    para[10] = mar1;
    para[11] = mar2;
    para[12] = caltyp;
    para[13] = bnk;
    if(rateid == 9) {
        PageMethods.rates(para,"avgspot",suc1,err1);
        function suc1(res){rds=res;return rds;}
        function err1(){}
    } else {
        PageMethods.rates(para,"calcrates",suc2,err2);
        function suc2(res){rds=res;return rds;}
        function err2(){}
    }
}

dsrt возвращает значение как "Undefined".


person Community    schedule 04.04.2014    source источник
comment
calculate_all_rates ничего не возвращает. Это нормально, что dsrt всегда не определен.   -  person adripanico    schedule 04.04.2014
comment
Попробуйте добавить return 1 к calculate_all_rates прямо перед последним }, и вы получите 1 к dsrt.   -  person Iqbal Fauzi    schedule 04.04.2014
comment
Что делает PageMethods.rates? Это асинхронно?   -  person Bergi    schedule 05.04.2014


Ответы (3)


Сделайте следующие изменения. Оно работает.

Вы не можете присвоить dsrt значение, возвращаемое методами страницы, которое находится в другой функции. поэтому используйте dsrt и все функции Calculate_all_rates в вызывающей функции

старый код:

dsrt = calculate_all_rates(ratetypes.Day1_Rate, ddlccy.options[ddlccy.selectedIndex].value, ses, ccytype.ID, ((ddltype.options[ddltype.selectedIndex].text == "Export") ? postyp.Export : postyp.Import), dt, mat2, mat2, ddlpf.options[ddlpf.selectedIndex].value, 0, 0, 0, "", ddlbank.options[ddlbank.selectedIndex].value);

новый код:

function Common()
{
 var rateid;var ccy1;var ccy2;var ctyp;var typ;var posdt;var matdt1;var matdt2;var pfid;var mar;
var mar1;var mar2;var caltyp;var bnk;
{rateid=ratetypes.Day1_Rate;ccy1=ddlccy.options[ddlccy.selectedIndex].value;ccy2=ses;ctyp=ccytype.ID;typ=((ddltype.options[ddltype.selectedIndex].text == "Export") ? postyp.Export : postyp.Import);posdt=dt;matdt1=mat2;matdt2=mat2;pfid=ddlpf.options[ddlpf.selectedIndex].value;mar=0;mar1=0;mar2=0;caltyp="";caltyp=bnk=ddlbank.options[ddlbank.selectedIndex].value;}

var str;
var para_arr = new Array();
para_arr[0] = rateid;
para_arr[1] = ccy1;
para_arr[2] = ccy2;
para_arr[3] = ((ctyp == 1) ? "ID" : "NAME");
para_arr[4] = ((typ == 1) ? "Export" : "Import");
para_arr[5] = posdt;
para_arr[6] = matdt1;
para_arr[7] = matdt2;
para_arr[8] = pfid;
para_arr[9] = mar;
para_arr[10] = mar1;
para_arr[11] = mar2;
para_arr[12] = caltyp;
para_arr[13] = bnk;
if(rateid == 9)
{
    str="avgspot";
}
else
{
    str="calcrates";
}
PageMethods.rates(para_arr,str,calc_suc,calc_err);
function calc_suc(resp)
{
  dsrt=resp;
}
function calc_err(){}
}
person King of kings    schedule 07.04.2014

попробуйте поставить return перед функцией, т.е.

return  function suc1(res){rds=res;return rds;}
person Thyagu    schedule 04.04.2014
comment
Не лучше ли просто return res;? - person adripanico; 04.04.2014
comment
Поскольку res является локальной переменной, вы не можете вернуть res - person King of kings; 04.04.2014

у вас есть возврат для вашей основной функции

пытаться

var rds;
function suc1(res){rds=res;}
return rds;
person MinerBigWhale    schedule 04.04.2014
comment
если я установлю так, rds будет иметь пустое значение - person ; 04.04.2014
comment
установите rds как глобальную переменную (инициализируйте из своей основной функции) - person MinerBigWhale; 04.04.2014