2011-09-28 59 views
0

在此代码:如何让单一的功能这里使用两个时间

if (!parms.script) { // no script... load filename 
      execscript(parms, function (data){ 
       var text={'result':'success', 'response':data }; 
       if(typeof(data)!='object') { 
        try { 
         text.response=JSON.parse(text.response); 
        } catch(e) { 
         text={'result':'success','response':data}; 
        } 
       } 
       responsehttp.end(JSON.stringify(text)); 

      }); 
    } else { 
     //parameterised input will replace in script 
     if(query.paraminput!=undefined) { 
      var paraminput=qs.parse(query.paraminput); 
      parms=merge_options(parms, paraminput); 
     } 
     execscript(parms, function (data){ 
      var text={'result':'success', 'response':data }; 
      if(typeof(data)!='object') { 
       try { 
        text.response=JSON.parse(text.response); 
       } catch(e) { 
        text={'result':'success','response':data}; 
       } 
      } 
      responsehttp.end(JSON.stringify(text)); 

     }); 
    } 

在EXECSCRIPT回调它被称为两次,我想打一个单一的功能,用于执行再打if和else。

我该如何做到这一点。

我试着使独立的功能,但responsehttp未发现的错误camed。

回答

1

问题是(我怀疑)是你的公共函数在你的http响应处理程序的上下文之外声明,因此responsehttp没有定义。相反,将其创建为closure function你的外部函数的范围内:

function someCallbackYouDontShowInYourQuestion(req, responsehttp) { 
    // Declare your callback as a closure inside this function, so it 
    // captures responsehttp state 
    function callback(data) { 
    var text={'result':'success', 'response':data }; 
    if(typeof(data)!='object') { 
     try { 
     text.response=JSON.parse(text.response); 
     } catch(e) { 
     text={'result':'success','response':data}; 
     } 
    } 
    responsehttp.end(JSON.stringify(text)); 

    } 

    if (!parms.script) { // no script... load filename 
    execscript(parms, callback); 
    } else { 
    //parameterised input will replace in script 
    if(query.paraminput!=undefined) { 
     var paraminput=qs.parse(query.paraminput); 
     parms=merge_options(parms, paraminput); 
    } 
    execscript(parms, callback); 
    } 
} 
0
callback = function (data){ 
      var text={'result':'success', 'response':data }; 
      if(typeof(data)!='object') { 
       try { 
        text.response=JSON.parse(text.response); 
       } catch(e) { 
        text={'result':'success','response':data}; 
       } 
      } 
      responsehttp.end(JSON.stringify(text)); 

     } 

execscript(parms, callback); 
+0

我试过,但给人的是responsehttp没有定义的错误。为什么会出现这个错误。 – XMen