簡體   English   中英

Ajax請求最大執行超時

[英]Ajax request max execution timing out

在使用此代碼通過Ajax XHTMLRequest收集數據時,我得到了PHP Max執行超時

if(isset($_GET['func']) and $_GET['func'] == 'feed') {
    global $ado;
    $old_msg_id = $_GET['old_msg_id']; 
    $result = $ado->exec("SELECT * FROM `earnings` ORDER BY `id` DESC LIMIT 1");
    while($row = $ado->fetch_assoc($result)) {
        $last_msg_id = $row['id']; 
    }
    while($last_msg_id <= $old_msg_id) {
        $result = $ado->exec("SELECT * FROM `earnings` ORDER BY `id` DESC LIMIT 1");
        while($row = $ado->fetch_assoc($result)) {
            $last_msg_id = $row['id'];
        }
    }
    $response = array();
    $response['msg'] = 'new';
    $response['old_msg_id'] = $last_msg_id;
    echo json_encode($response);
}

我在error_log中收到的錯誤是

PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /ajax.php on line 165

165行如下:

while($last_msg_id <= $old_msg_id) {

我目前看不到代碼有問題,關於什么地方有什么暗示?

JS等級

在AJAX中,您可以按照以下方式發布超時時間,

       jQuery.ajax({
           url: 'ajaxhandler.php',
           success: function (result) {                               
                returned_value=result;
           },
           timeout: 10000,
           async: false
        });

PHP級別

如果您要獲取PHP,則可以在PHP.ini中進行更改

max_execution_time = 30 //make it like 300

否則,在您的PHP代碼中使用set_time_limit

調用時,set_time_limit()從零重新啟動超時計數器。 換句話說,如果超時是默認的30秒,並且在腳本執行后的25秒內執行了諸如set_time_limit(20)之類的調用,則該腳本將在超時之前運行總計45秒。

還要確保那些while循環永遠不會結束循環。

看來您的兩個while循環執行所需的時間太長,數據庫中是否分配了數據。

暫無
暫無

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

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