2017-10-19 103 views
0

如何通過命令在for循環中發送ajax?這裏是我的代碼:按順序運行ajax請求

function ajax_sent(i, btn){ 
    jQuery.ajax({ 
     url : ln_ajax_handle.ajax_url, 
     type : 'post', 
     data : { 
      action : 'ln_ajax_handle', 
      main_data : i 
     }, 
     success : function(result){ 
      jQuery('#ln-modal-bangchinh').append(result); 
      if(i === 5){ 
       btn.button('reset'); 
       jQuery('#ln-content-modal').modal('show'); 
      } 
     } 
    }); 
} 

jQuery(document).ready(function(){ 
    jQuery('.ln-update').click(function(){ 
     var btn = jQuery(this); 
     btn.button('loading'); 

     for(var i = 1; i <= 5; ++i){ 
      ajax_sent(i, btn); 
     } 
    }); 
}); 

,這裏是簡單的PHP測試功能:

function ln_ajax_handle(){ 
    $data = $_POST['main_data']; 

    echo ln_alert_test($data); 

    wp_die(); 
} 

function ln_alert_test($data){ 
    ob_start(); 
    ?> 
    <div class="alert"> 
     <button type="button" class="close" data-dismiss="alert">&times;</button> 
     <strong>Success!</strong> The loop run by <?php echo $data; ?> times; 
    </div> 
    <?php return ob_get_clean(); 
} 

在PHP文件,我用echo得到簡單的測試。但結果是數字不是按順序排序,就像圖像一樣。 enter image description here。我想要當i = 1,我從服務器得到響應,i = 2將被執行。下一步的進展是一樣的。任何方式來做到這一點?

+5

因爲AJAX是異步的,你不能,除非您在前面的AJAX調用的回調AJAX調用保證接收訂單的結果。 –

+1

你可以通過將這個添加到你的ajax調用'async:false'來使它同步 – cmorrissey

+2

@cmorrissey是正確的,但是你的瀏覽器將被鎖定,直到所有的AJAX請求完成。不推薦。 –

回答

4

您需要以這種方式鏈接ajax請求,其他請求在前一個請求完成後開始。

var i = 1, 
    fn = function() { 
    i <= 5 && ajax_sent(++i, btn, fn); 
    }; 

ajax_sent(i, btn, fn); 

// add a callback cb to be called on success 
function ajax_sent(i, btn, cb) { 
    jQuery.ajax({ 
    url: ln_ajax_handle.ajax_url, 
    type: 'post', 
    data: { 
     action: 'ln_ajax_handle', 
     main_data: i 
    }, 
    success: function(result) { 
     // if a callback was provided call it 
     cb && cb(); 
     jQuery('#ln-modal-bangchinh').append(result); 
     if (i === 5) { 
     btn.button('reset'); 
     jQuery('#ln-content-modal').modal('show'); 
     } 
    } 
    }); 
} 
+0

我是新的JS,所以我現在無法理解你的代碼。它的工作,但有一個問題。在下一個請求運行之前,第一個請求(當'i = 1'運行兩次)。你能再檢查一次嗎? –

+1

我更新了答案。我的錯。我正在使用i ++,並且會在調用它自己之後更改i值。現在它是++我和函數調用接收已經遞增的值。 – bluehipy

+0

它工作正常。非常感謝你,我節省了很多時間。 –