2012-02-21 13 views
0

javascript関数の名前をグローバル変数に渡そうとしています。私は$ .ajax()の周りに構築された汎用の "CallMyWebService"関数を持っています。関数のurl、verb、contenttypeなどは、グローバル変数の値に基づいて設定されます。サービス関数が呼び出される直前に、グローバルは設定され、グローバルは何もリセットされません。関数をグローバル変数に割り当てるにはどうすればよいですか?

私の一般的な "CallMyWebService" 機能はここにある:

function CallMyWebService() { 

    $.ajax(
     { 
     url   : varUrl, 
     type  : varHttpVerb, 
     cache  : varCacheBool, 
     data  : varData, 
     contentType : varContentType, 
     processdata : varProcessData, 
     dataType : varDataType, 
     async  : varAsync, 
     success  : varOnSuccess, 
     error  : varOnError, 
     complete : varOnComplete 
     } 
    ) 

} 

私がいる問題がvarOnSuccessvarOnError、およびvarOnCompleteに関数名を渡すことです。私がSuccessCallback()という名前の関数を持っていて、SuccessCallback()に渡されたサービスコールのresultを、varOnSuccessグローバル変数に代入したいのですが?変数の代入はSetupServiceCall()という別の関数で行われます。つまり、SetupServiceCall()機能では、どのようにvarOnSuccess =を完了する必要がありますか?

+2

実際には、すべての変数*名の前に 'var'が付いていますか? – ThiefMaster

+0

@ThiefMaster - はい、私たちはメンテナンスモードに入っていますので、できる限りやっています。 – Joe

答えて

2

は、私が言う:SuccessCallbackは()を受け取りますパラメータの詳細については、jQueryのドキュメントの

varOnSuccess = SuccessCallback; 

ルック。

+0

ありがとうございます。これで直ちに問題が解決しました。私はヨルダンのソリューション(機能に価値を渡す)が好まれますが、時々あなたは包帯を適用し、動くことを必要とするだけです。 – Joe

2

CallMyWebServiceは、これらの関数をパラメータとして受け入れる必要があります。また、文字列名の代わりに参照渡しする必要があります。

グローバル変数を使用しないでください。並行して呼び出しがあった場合、これは失敗します。

例:

var varOnSuccess = null; 
function SetupServiceCall() { 
    varOnSuccess = SuccessCallback; //note 
} 

function CallMyWebService(successCallback, errorCallback) { 
    $.ajax(
     ... 
     success: successCallback, 
     error: errorCallback 
     ... 
    ); 
} 

//calling the service 
function MySuccessHandler(data) { 
    alert('success'); 
} 

function MyErrorHandler(data) { 
    alert('error'); 
} 

CallMyWebService(MySuccessHandler, MyErrorHandler); 
0

あなたのような意味ですか?

+0

変数がグローバルでないことを示すには、varキーワードを使用します。 – joidegn

+0

@joidegnそれは必ずしも真実ではありません。関数の外で宣言されたvarはすべてグローバルになります。 – noah

0

あなたは、単にたとえば、あなたのAJAX呼び出しに括弧なしの関数名を使用することができます。

$.ajax({ 
... 
success: SuccessCallback, 
error: ErrorCallback, 
... 
}); 
0
window.varOnSuccess = SuccessCallback 

しかし

を動作するはずです、私は可変部分を渡す方が良いだろうと思います次のような引数としてCallMyWebServiceに渡します。

function CallMyWebService(varSuccess, varError) { 

    $.ajax({ 
     url   : varUrl, 
     type  : varHttpVerb, 
     cache  : varCacheBool, 
     data  : varData, 
     contentType : varContentType, 
     processdata : varProcessData, 
     dataType : varDataType, 
     async  : varAsync, 
     success  : varSuccess, 
     error  : varError, 
     complete : varOnComplete 
    }); 

} 
関連する問題