2012-03-12 20 views
0

からJSON変数を返すことができない私は機能を持っている:私はjqueryのAJAX機能

私は、関数からJSON変数を返す必要が
function get_playlist(){  

     var result = jQuery.ajax({ 
      url: '<?php echo admin_url('admin-ajax.php'); ?>', 
      type: 'post', 
      dataType: 'json', 
      data: { 
       action: 'getrandommp3', 
       nonce:'<?php echo wp_create_nonce('randmp3'); ?>' 
      }, 
      success: function(response) { 
       console.log(response); // All OK! 
       window.response = response; 
       var customvar = response; 
       return response; 
      }    
     }); 
     console.log(window.response); // undefined 
     console.log(result.responseText); //undefined 
     console.log(customvar); //undefined 
     return window.response; // returning undefined 
    } 

。内にはsuccess: function(response) {応答が必要な内容があります。しかし...

jqueryのmp3プレーヤーのために必要なこのコード...私は問題を抱えているJquery.ajax

var playlist = get_playlist(); 
var myPlaylist = new jPlayerPlaylist(cssSelector, playlist, options); 
myPlaylist.shuffle(true, true); 

は助けてくれてありがとう!

答えて

2

これは、AJAXが(非同期に)動作する方法です。応答ハンドラが返される前に、イベントハンドラ以外のconsole.logステートメントが実行されます(まだwindow.responseには何も割り当てられていません)。 successイベントハンドラの内部でAJAX応答に依存するコードを記述します。

また、リクエストを同期させることもできますが、通常はレスポンスが返されるまでブラウザをロックできるため、リクエストを同期させることはできません。私が持っている

function get_playlist(){  
    var result = jQuery.ajax({ 
     //Other AJAX options removed 
     success: function(response) { 
      var myPlaylist = new jPlayerPlaylist(cssSelector, response, options); 
      myPlaylist.shuffle(true, true); 
     }    
    }); 
} 
+0

更新(疑問視するコメントや編集を参照)

私は前述したように、あなたは準備ができて、イベントハンドラ内のAJAXの応答に依存しているすべてのコードを配置する必要がありますJquery playerと私はそれのためにjson mp3のリストを返す必要があります。 'var playlist = get_playlist(); \t \t \t var myPlaylist = new jPlayerPlaylist(cssSelector、playlist、options); \t \t \t myPlaylist.shuffle(true、true); ' –

+0

次に、' success'イベントハンドラの中に 'jPlayer'を作成します。私の編集を参照してください。 –

+0

ありがとうございました) –