2013-07-01 16 views
0

我有這個使用Web服務的非常長的過程,我需要通過ajax請求使用單個按鈕啓動,因此我可以在過程完成時顯示響應消息。 Ajax請求只是調用一個Zend控制器,它可以概括這種方式:ajax請求上的套接字讀取超時:任何解決方法?

public function myajaxAction() { 
    $myModel = new MyModel(); 
    $someData = $myModel->fetchAll(); 
    foreach ($someData as $dataElement) { 
    $response = call_to_remote_client($dataElement['ID']); 
    echo $response; 
    } 
    $this->_helper->viewRenderer->setNoRender(); 
    $this->_helper->getHelper('layout')->disableLayout(); 
} 

的$響應隨後收到成功的參數,可以是HTML()倒是爲一些響應格。

這一切都很順利,但我現在發現,如果上述過程需要太多時間來運行,我的ajax請求將失敗,因爲502錯誤網關錯誤。 Firebug告訴我,每次5分鐘和0秒後會發生這種情況,所以聽起來很像超時。

我發現this link似乎討論完全相同的問題。它幫助我更好地發現問題,但我想不出任何解決方案。沒有辦法增加這個超時時間嗎?我嘗試在stdout上使用stream_set_timeout(),但我顯然不知道自己在做什麼,因此顯然不起作用。

對我現在有哪些選擇有任何想法?

+0

你嘗試設置''的set_time_limit在bootstrap.php中(0)? – DevZer0

+0

顯然不是。將嘗試。 – SylvainB

+0

試過了,5分鐘後出現同樣的錯誤網關錯誤。 – SylvainB

回答

0

我想了一會兒,因爲我不能以任何方式增加這個超時(系統管理員說不),我不得不辭職並去另一個選項:遞歸ajax調用。這是代碼。

控制器:

public function myajaxAction() { 
    $request = $this->getRequest(); 
    $turn = $request->getParam('turn'); 

    $myModel = new MyModel(); 
    $someData = $myModel->fetchAll(null, null, 50, $turn * 50); 
    $response = array(); 
    foreach ($someData as $dataElement) { 
    $result = call_to_remote_client($dataElement['ID']); 
    $response[] = $result; 
    } 
    $this->_helper->layout()->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(true); 
    echo json_encode($response); 
} 

Ajax調用:

var recurseajax = function(turn) { 
    $.ajax({ 
    type: 'POST', 
    url: '/myzend/ajax/myajax', 
    data: {'turn':turn}, 
    success: function (data) { 
     var respond = $.parseJSON(data); 
     var len = respond.length; 
     for (var i = 0; i < len; i++) { 
     $("#responsediv").append(respond[i]); 
     } 
     if (len === 50) recurseajax(turn + 1); 
     else $('#loading').hide(); 
    } 
    }); 
}; 
$('#myButton').click(function(){ 
    $('#loading').show(); 
    recurseajax(0); 
}); 
相關問題