如何在jquery中完成一个函数执行另一个函数的加载条件?

时间:2013-03-28 18:04:42

标签: javascript ajax jquery

我有以下脚本将新值添加到我的会话变量数组中,并向我展示变量完全实时会话

(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完成后为IF发送IF条件会返回我的GET响应?

感谢

1 个答案:

答案 0 :(得分: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 );
根据Ian的好建议

更新我用new done()语法替换了不推荐使用的success()函数

Update2 我收集了来自radi8的另一个很棒的建议