簡體   English   中英

jQuery .load在進行ajax查詢時不起作用

[英]jQuery .load doesn't work whilst ajax query is in progress

我有一個Web應用程序,使用ajax請求或.load()請求將不同的內容加載到同一div(.content)中。

ajax請求的簡化版本是:

    $(document).on('click', '.button1', function() {
        $.ajax({
        type: "POST",
        url: "/path/to/file/ajax.php",
        data: {
            'param1': 'xyz',
            'param2': '123',    
        },
        timeout: 10000,
        dataType: "json",
        success: function(data) {
            if (data.status == 'Success') {
                $('.content').html(data.result);
            } else if (data.status == 'Error'){
                console.log('Something went wrong')
            }
        },
        error: function(x, status, error) {
            if (status === "timeout") { 
               console.log('Request Timed Out');
            } 
        },
        }); 
    });

在另一個按鈕上,我有:

    $(document).on('click', '.button2', function() {
          $('.content').load('/path/to/file/getContent.php?ref=foo');
    });

問題是,如果我在繼續執行ajax請求時單擊button1,然后單擊按鈕2,則不會發生任何事情。 (即getContent.php似乎在15到30秒之間的任何時間都未返回任何內容)

單擊按鈕2會立即返回結果,但是一旦單擊button1並且正在處理ajax請求,它似乎就“拖延”了整個Web應用程序,直到完成(或出錯)為止。

(我也嘗試過使用abort()方法取消ajax請求,但是即使中止成功,同樣的問題仍然存在)。

更新請參閱下面的解決方案/答案

在@adeneo的技巧之后,我對session_start和ajax調用進行了更多研究,從而使我得出了這篇文章:

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

絕對的問題與session_start鎖定會話文件有關,這會導致多個ajax請求的后端問題。 按照上面文章中的建議,我在PHP中使用了session_write_close(),並且一切正常。

如果可以幫助其他人,我實際上將代碼從session_start()更改為:

    if (session_status() == PHP_SESSION_NONE) {
       session_start();
       session_write_close();
    }

這使會話變量可讀,但不再鎖定會話文件,從而導致ajax請求延遲。 (它還會檢查以確保尚未調用session_start())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM