我在一個不斷輪詢服務器的頁面中有一個iframe,它正在被一個「主」XHR主動更新的會話變量。爲什麼我的XHR呼叫等待對方返回響應
所以基本上:
主要XHR運行並做它的事情,更新會話變量,因爲它運行。通常需要一段時間,比如10秒以上。
當主XHR正在運行時,我使用並行XHR請求輪詢服務器以查找相同的會話變量。每當我收到來自輪詢XHR的響應時,我都應該更新前端視圖。
的問題是,輪詢XHR時不返回任何直到主XHR完成後,在這一點上,他們已經是無用的,當然。處理會話時,這真的是預期的行爲嗎?每個客戶端連接有一種會話類型的限制?
編輯:
這是一些代碼片段。代碼非常大,所以我試圖將其縮減爲最基本的要素。它可能有一些語法錯誤,因爲我只是從源代碼中拿出重要的部分。
生成的iframe
(function($) {
$(document).on('click','#proceed_form',function(){
$('#upload_frame').show();
function set() {
$('#upload_frame').attr('src','/productUpload/generateIframe');
}
setTimeout(set);
});
});
的iFrame
<script type='text/javascript' src="/assets/js/src/vendor/jquery-1.9.1.js" ></script>
<script>
(function($) {
$(document).ready(function() {
setInterval(function()
{
$.get("/productController/getProgress", function(data)
{
$('#progress_container').fadeIn(100); //fade in progress bar
$('#progress_bar').width(data +"%"); //set width of progress bar based on the $status value (set at the top of this page)
$('#progress_completed').html(parseInt(data) +"%"); //display the % completed within the progress bar
}
)},500);
});
})(jQuery);
</script>
<div id="progress_container">
<div id="progress_bar">
<div id="progress_completed"></div>
</div>
</div>
PHP應用
class productUpload extends CI_Controller{
/**
* Respond to XHR poll request
*
*/
public function getUploadedBytesToCloud()
{
session_start();
$uploadedBytes = $_SESSION['bytes_uploaded'];
echo json_encode(['uploadedBytes' => $uploadedBytes]);
}
/**
* Main controller action
* Uploads the images of a product to the cloud
*
*/
public function moveProductImagesToCloud($productId)
{
/**
* Some logic to get the product image directory
*
*/
$productPath = '/assets/product/image_dir';
$directoryMap = directory_map($productPath);
foreach($directoryMap as $key => $file){
/**
* Upload file to AWS S3 bucket
*/
$this->awsUploader->uploadFile(...);
$fileSize = $_SESSION['bytes_uploaded'];
$fileSize += filesize(getcwd()."/".$productPath."/".$file);
$_SESSION['bytes_uploaded'] = fileSize;
}
}
}
請提供您用於製作和發送XHR的實際代碼 - 無法從您的描述中瞭解發生了什麼。 – Sacho 2014-11-24 09:56:53
如果您嘗試通過兩個異步調用更新和獲取相同變量,則聽起來像有某種競爭條件正在發生。 – Vidur 2014-11-24 10:07:17
@Sacho我添加了一些代碼片段。 – turntwo 2014-11-24 11:55:46