2012-01-10 108 views
2

我已經在一個使用kQuery ajax的函數中做了一個長查詢請求,它將一直運行。還有另一個要求發送數據到php後端文件的請求,這第二個請求不是長查詢,它只是發送數據到該php文件。jquery ajax多個請求

問題:我用Firebug檢查過,當長輪詢請求運行時,只要長輪詢正在運行,我就無法發送另一個請求。即使長輪詢正在運行,我如何發送另一個請求?

注:我在兩個中都使用了async:true

另一個問題:如何確保即使持有長輪詢請求代碼的函數將被調用多次,但長輪詢請求將只發,只有一個

回答

5

是否根據你的php使用會話認證?你的問題可能是會話鎖定。這可以發生在PHP中,它無條件地在每個請求的頂部使用session_start(),並且有時甚至在MVC框架中默認行爲,即使會話永遠不會被修改。其他可疑用例是,如果兩個腳本都依賴以管理員用戶身份登錄。

如果您懷疑可能出現這種情況,請在您不再需要修改兩個腳本的會話數據後儘早嘗試session_write_close()的策略性位置。

+0

是的PHP腳本正在使用會話,但有必要使用它,因爲它的聊天應用程序。 – 2012-01-10 07:22:00

+0

你的回答很有用 – 2012-01-10 18:58:02

+0

如何在使用'session_write_close()'之後對會話變量進行更改? – 2012-01-11 08:47:10

0

您需要使用async : true (這是默認值)。

如果說async : false這意味着它做了同步要求,即,等待第一個請求做任何其他之前完成。您需要一個異步請求,以便瀏覽器在等待第一個請求的響應時可以繼續執行其他操作。

(很少有需要async : false,如果你不知道你是否需要它,你幾乎肯定不會。)

+0

不好意思,我錯了或有人編輯的問題,我使用異步:在這兩個函數中都是true – 2012-01-10 06:46:02

+0

編輯問題 – 2012-01-10 06:46:22

+0

好吧,那讓我的回答有些過時。如果你已經使用了'async:true',那麼它應該可以工作 - 我肯定會在之前運行多個併發的ajax請求(並且響應以不同的順序返回,即首先處理速度最快)。 – nnnnnn 2012-01-10 07:08:50