2012-02-24 7 views
0

jsonpリクエストの結果から変数を作成しようとしていて、この変数をスクリプトの後半で使用しています。しかし、jsonpリクエストが行われる前に、変数が使用されている部分がトリガされているようです。jsonpリクエストの前にvarを読み込もうとしています

function onSuccess(data) { 
    var result = data['result']; 
    console.log(result); 
} 

function onError(data) { 
    alert(data); 
} 

$.ajax({ 
    url:"http://suneeriksen.unboxer.org/", 
    cache: false, 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    timeout: 5000, 
    success: onSuccess, 
    error: onError 
}); 


var gallery, 
    el, 
    i, 
    page, 
    dots = document.querySelectorAll('#nav li'), 
    slides = result //this is where I try to fetch the variable 

    ]; 

これがどのように実行されたかを把握しようとしました。私はjsonpリクエストを関数に入れようとしましたが、次のようにしています: var slides = jsonpResult();

何か手掛かりはありますか?

EDIT: は私もギャラリー変数

gallery.onFlip(function() { 
//Doing stuff 
} 

を使用しての機能を持っていると私はするonSuccess関数内でこれらのすべてを置くことはできません。

+1

さて、アクセスできないのは、アクセスしようとしているアクセス結果です。代わりに、 'result'変数に依存するコードは、' success'コールバックの内部に配置する必要があります。 –

+0

良い提案ですが、ギャラリーvarに依存する後で呼び出される関数があります。私は私の質問にいくつかの情報を追加しました。 – Spoeken

+0

それ以外の方法( 'async:false'を使わない)は、' jqXHR'オブジェクトを保存し、後で返されたデータを必要とするコードを実行する必要があるときにイベントをバインドするだけです。 –

答えて

1

2つの方法があります。

はAjaxのコールオプション(このアプローチは廃止されることに注意してください)でasync: trueを設定することにより、AJAX呼び出しが(同期)ではないことを確認します。

か:

は成功コールバック内からslides変数を使用するものは何でもコード(、あなたが将来の使用のためにそれを必要とする場合、そこにも割り当てない)を呼び出してください。

+0

何とかこれは突然働いた。そのようにとどまることを望みます – Spoeken

3

onSuccessのためにバインドする - onSuccessが発生するまで、それを使用する関数を呼び出さないでください。 あなたの要求を同期させることもできます(あなたのajaxが実行されるまでコードは実行されません)。しかし、そうしないことを強くお勧めします。

+0

私はそれを試みましたが、それは成功がそれを完了するために気にしない機能を引き起こすので、それはように見えます。 – Spoeken

関連する問題