2017-02-14 39 views
-1

我正在使用Laravel和Jquery構建一個網站。該頁面發出多個AJAX調用。AJAX調用停止頁面加載其他元素

其中一個調用可能需要幾秒鐘,它似乎阻止加載頁面的其他元素。這包括圖像和其他AJAX調用。

我的代碼或多或少看起來像這樣。

$.ajax({ 
     async: true, 
     url: url, 
     data: { 
      //data 
     }, 
     success: function (response) { 

     //Process response (append html, images, etc.) 

     for (var key in response) { 
      newAJAXCall(response[key]); 
      } 
     }, 
     error: function (xhr) { 

     } 
    }); 

newAJAXCall調用如下:

$.ajax({ 
     async: true, 
     url: url, 
     data: { 
      //data 

     }, 
     success: function (response) { 
      //Process response 

     }, 
     error: function (xhr) { 

     } 
    }); 

newAJAXCall是什麼導致了問題。一些呼叫在200毫秒內完成。但有些可能需要幾秒鐘。發生這種情況時,如果有任何元素尚未加載,則停止加載。

在圖像的情況下,它們的html已經存在。瀏覽器停止加載它們直到AJAX調用完成。

我已經嘗試設置異步並使用超時,但似乎沒有解決它。 Chrome和Safari都出現這個問題,所以它似乎並不是瀏覽器特有的。

編輯:即使當for循環被刪除,並且只有當問題一直存在,如果通話持續很長時才發出新的ajax調用。編輯2:Laravel/Php可能限制單個客戶端可以打開的連接數量嗎?

EDIT3:它似乎是我的服務器導致問題。當我從不同於我自己的服務器加載圖像時,它們在ajax請求期間加載正常。

+0

你的newAJAXCall函數是什麼?你是否也使它異步? –

+0

這是一個類似的AJAX調用,除了這個不會發出新的AJAX調用。我將這兩個設置爲異步。 – Yoran

+0

我相信這是導致你的問題的for循環。你可能需要改變你使用newAJAXCall()的方式http://stackoverflow.com/questions/4288759/asynchronous-for-cycle-in-javascript –

回答

-1

按我的意見,請考慮newAJAXCall成功函數

$.ajax({ 
    async: true, 
    url: url, 
    data: { 
     //data 
    }, 
    success: function (response) { 

    //Process response (append html, images, etc.) 


     newAJAXCall(response); 
    }, 
    error: function (xhr) { 

    } 
}); 


function newAJAXCall(response) { 
$.ajax({ 
    async: true, 
    url: url, 
    data: { 
     //data 

    }, 
    success: function (response) { 

     for (var key in response) { 
      //Process response[key] 
     } 

    }, 
    error: function (xhr) { 

    } 
}); 

}

+0

感謝您的回覆。然而,for循環似乎不會導致問題。當我把它拿出來並且只爲一個較長的調用運行一次ajax調用時,問題依然存在。 – Yoran

+0

http://stackoverflow.com/questions/18366118/when-to-use-async-false-and-async-true-in-ajax-function-in-jquery我相信這是答案然後:) –

+0

異步:在這種情況下不使用假,所以,不,這不是答案。 –

0

的問題是,我的本地服務器沒有足夠的能力範圍內把for循環。當網站運行在我的專用服務器上時,一切正常。