【问题标题】:getJSON and variable scope in javascriptjavascript中的getJSON和变量范围
【发布时间】:2010-06-02 18:25:07
【问题描述】:

为了对我们的后端 php 代码进行函数调用,我们实现了一个名为 ActionProxy 的东西,如下所示:

function ActionProxy(action, input, callback){  
    $.post("ActionProxy.php?method="+action, 
        { data: input},   
            function(data, textStatus, XMLHttpRequest){
                        //return data.ResponseWhatever
                        }
});

我们遇到的问题是,由于变量范围限制(我们假设),无法在 ActionProxy 之外使用数据,设置
var res = data.ResponseWhatever

return data.ResponseWhatever

实在是太没用了。如何最恰当地处理这些响应,以便调用 actionproxy 的函数可以访问响应值?

【问题讨论】:

    标签: javascript jquery scope


    【解决方案1】:

    您可以使用window.ResponseWhatever = data.ResponseWhatever,但是,这不是最明智的做法。你想要的是做这样的事情:

    function ActionProxy(action, input, callback){
        $.post("ActionProxy.php?method="+action, {data:input},
            function(data, textStatus, xhr){callback(data);});
    }
    

    注意:我不是 jQuery-guru,所以我可能弄错了一些 jQuery-parts,但关键是你想调用 return data 而不是调用 callback(data);

    【讨论】:

    • 我们实际上也想到了这一点,但考虑到我们并不总是想要回调,我们有时只想接收返回值。是否有可能,或者这是一个“应该”写它的方式?
    • 你不能使用return,只要调用是异步的,你真的不想做一个同步请求,因为它是一个阻塞操作(在许多浏览器中,甚至 UI 冻结) .
    【解决方案2】:

    嗯,我确实采用了 Alxandr 提供的解决方案。事实证明,如果我想要结果,我必须实现一个回调,但为了不关心结果,我只用前两个参数调用 ActionProxy 并检查回调函数是否存在,如下所示:
    function ActionProxy(action, input, callback){

    $.post("ActionProxy.php?method="+action, {data:input}, 函数(数据,文本状态,xhr){
    如果(回调){
    回调(数据); }
    });

    }

    我预计会出现错误,调用带有两个参数的三参数函数。哦,好吧 - javascript 是一种奇怪的语言。 :)

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 2012-03-30
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2014-09-05
      • 2010-12-21
      • 2015-07-28
      • 2012-05-03
      相关资源
      最近更新 更多