【问题标题】:Retrieving callback value from calling function. How to?从调用函数中检索回调值。如何?
【发布时间】:2012-05-26 14:33:09
【问题描述】:

在我进行 ajax 调用的函数中,回调具有我在该函数中需要的 response_text。我尝试将var here 放在调用函数中并在回调函数中使用它。这不起作用。接下来我尝试使用function out(),这是我以前做过的。这很有效,因为我现在可以从 out() 访问 response_text。不过有没有办法直接从vOrb()访问,也就是原来的调用函数呢?

我不想像 SO Question 那样将所有代码都放在回调中

当回调函数异步返回时,模块模式是否可以作为将var here 保持在范围内的一种方式?或者只是将var vOrb = function(){} 写成一个包装并使用new 调用,就行了?

function vOrb( icon_array )
{
    var here; // does not work
    function out( here ){} // does work
    new AjaxRequest().invoke( 'ajax_type=fav_dir', function( response_text )
    {
        out( response_text );
    } ); 

// want response_text here

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我不确定我是否理解一切正确,但无论如何我都会尝试回答。 如果这是您想要的,则不能在回调之外使用 response_text - 它是未定义的。

    最好这样进行:

    function vOrb( icon_array )
    {
        new AjaxRequest().invoke( 'ajax_type=fav_dir', myCallback ); 
        var myCallback = function ( response_text ) {
            // blah…
        };
    }
    

    如果您绝对想在回调之外使用 response_text,那么您必须先检查它是否已设置。

    var my_response;
    function vOrb( icon_array )
    {
        new AjaxRequest().invoke( 'ajax_type=fav_dir', myCallback ); 
        var myCallback = function ( response_text ) {
            my_response = response_text;
        };
    }
    
    // ...
    
    if ( typeof my_response !== 'undefined' ) { // will only work after the callback is triggered
        // use "my_response" here
    }
    

    【讨论】:

    • 我在我的问题中提到了第一种方法...第二种方法很有趣,但我认为 b.c.回调是异步的,my_response...将始终未定义...除非 ajax 调用可以在不到一个步骤内完成...解释了我之前收到的错误消息。
    • 确实,你无法避免使用回调。在发布我的答案几秒钟后,我意识到typeof my_response !== 'undefined' 条件总是错误的,除非您将my_response 放在更全局的范围内。无论如何,我的第二个提议意义不大——在回调中使用变量。
    • ...所以这将是另一种方法。
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多