0

私がajax呼び出しを行う関数では、コールバックにはその関数で必要なresponse_textが含まれています。呼び出し元の関数にaを入れて、var hereそれをコールバック関数で使用することは明らかです。これは動作しません。次に、function out()これまでに行った方法であるを使用してみました。これは、out()からresponse_textにアクセスできるようになったため機能します。vOrb()ただし、直接、つまり元の呼び出し関数からアクセスする方法はありますか?

このSOの質問のように、すべてのコードをコールバックに配置したくありません

モジュールパターン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
4

1 に答える 1

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
}
于 2012-05-26T14:59:13.667 に答える