2

次のスクリプトを使用して、セッション変数の配列に新しい値を追加し、変数の完全なライブ セッションを表示します

(function ($) { 

    Drupal.behaviors.MyfunctionTheme = {
        attach: function(context, settings) {

     $('.add-music').click(function () {
         var songNew = JSON.stringify({
             title: $(this).attr('data-title'),
             artist: $(this).attr('data-artist'),
             mp3: $(this).attr('href')
         });
         var songIE = {json:songNew};
         $.ajax({
             type: 'POST',
             data: songIE,
             datatype: 'json',
             async: true,
             cache: false
         });

         var session;
         $.ajaxSetup({cache: false})
         $.get('/getsession.php', function (data) {
             session = data;
             alert(session);
         });

     });

}}

})( jQuery );

問題は、POST の発送に GET ALERT の呼び出しよりも時間がかかり、更新されていないセッション変数が表示されることです。

POST が完了して GET の応答を返す場合にのみ、出荷の IF 条件を設定する方法はありますか?

ありがとう

4

1 に答える 1

3

実際にやりたいことは、コールバックを使用することです。つまり、POST ajax リクエストが返されるとすぐに呼び出される関数です。

例:

(function ($) { 

    Drupal.behaviors.MyfunctionTheme = {
        attach: function(context, settings) {

     $('.add-music').click(function () {
         var songNew = JSON.stringify({
             title: $(this).attr('data-title'),
             artist: $(this).attr('data-artist'),
             mp3: $(this).attr('href')
         });
         var songIE = {json:songNew};
         $.ajax({
             type: 'POST',
             data: songIE,
             datatype: 'json',
             async: true,
             cache: false                
         })
         .done(
              //this is the callback function, which will run when your POST request returns
            function(postData){
                //Make sure to test validity of the postData here before issuing the GET request
                var session;
                $.ajaxSetup({cache: false})
                $.get('/getsession.php', function (getData) {
                      session = getData;
                        alert(session);
                });

              }
         );

     });

}}

})( jQuery );

イアンの良い提案ごとに更新非推奨の success() 関数を新しい done() 構文に置き換えました

Update2 radi8からの別の素晴らしい提案を取り入れました

于 2013-03-28T18:11:16.207 に答える