2016-12-15 89 views
7

下面的代碼將控制檯日誌打印到頁面上。它記錄得到的迴應 - 服務器,如:Count console.log對象

14:15:17 GMT+0000 (GMT Standard Time) Submitting HTTP GET request to http... 
14:15:22 GMT+0000 (GMT Standard Time) Received HTTP response: {.. 
14:15:17 GMT+0000 (GMT Standard Time) Submitting HTTP GET request to http... 
14:15:22 GMT+0000 (GMT Standard Time) Received HTTP response: {.. 

而不是顯示這些到頁面上,我想,所以你看從1開始AA號碼和當它結束時結束計數每個響應和請求,可以是任何數量的。這是爲了向用戶顯示發生的事情,而不會顯示所有的響應和獲取數據。

 function logHttpResponse(response) { 
     var now = new Date(); 
     var logger = document.getElementById('log'); 
     var logMessage = now.toTimeString() + " Received HTTP response: " + JSON.stringify(response); 
     console.log = function (logMessage) { 
      if (typeof logMessage == 'object') { 
       logger.innerHTML += (JSON && JSON.stringify ? JSON.stringify(logMessage) : String(logMessage)) + '<br />'; 
      } else { 
       logger.innerHTML += logMessage + '<br />'; 
      } 
     } 
    } 

和HTML:

<div id="log"></div> 
+1

您指定給'console.log'每'時間logHttpResponse'被調用。有一件事我不認爲你應該重新分配'console.log',但無論如何,你只應該在函數外部執行一次(並且將'logger'作爲閉包參數傳​​遞)。 – Tatsh

+1

什麼阻止你(在做了什麼Tatsh建議後)把計數器放入你的閉包中,就像你已經關閉logMessage一樣? –

+0

如果在logHttpResponse()函數外定義一個變量,並在函數內部增加1,該怎麼辦?你可以在logMessage中設置它。 –

回答

2

如果你只是想覆蓋console.log打印響應的數量,這應該這樣做,但是這會增加任何console.log呼叫計數。

var logCount = 0 

console.log = function (logMessage) { 
    var logger = document.getElementById('log'); 
    logCount++; 
    logger.innerHTML = logCount; 
} 

如果你想指望的響應,而不是所有的控制檯日誌,使用這樣的

var logCount = 0 

function logHttpResponse(response) { 
    var logger = document.getElementById('log'); 
    logCount++; 
    logger.innerHTML = logCount; 
} 
1

你的問題是不完全清楚我的,但是從我的理解是,你嘗試在每個打開的http請求的狀態報告。我建議你,做一個函數包裝您的要求的計數是這樣的:

var globalCounter = 1; 
function performHttpRequest(requestUrl) { 
    // Store a local copy of the counter for this request 
    var currentCounter = globalCounter++; 

    // Log to the user in whatever way you see fit 
    // Could also for instance be with an array of status objects 
    logger.innerHTML += 'now starting request ' + currentCounter + '</br>'; 

    // Perform the async request using the framework you prefer 
    return $http.get(requestUrl) 
     .then(function(result) { 
      // When the async request finishes, update the log with the counter 
      // we saved earlier 
      logger.innerHTML += 'request ' + currentCounter + ' finished</br>'; 

      // Make sure to return the result of the action to the calling 
      // function. 
      return result; 
     }); 
} 

上面的例子使用角度來進行實際的http請求的框架,但它會在jQuery的只是以及工作或任何其他框架。

1

您可以使用PerformanceObserverentryTypes設置爲"resource"。在回調PerformanceObserverEntryList的第一個參數上調用.getEntries(),用for..of循環迭代條目對象。在入口對象上調用.toJSON(),將對象傳遞到Object.entries()以迭代每個屬性,當前入口對象的值在嵌套的for..of循環內迭代。

const observer = new PerformanceObserver((list, obj) => { 
    for (let entry of list.getEntries()) { 
    for (let [key, prop] of Object.entries(entry.toJSON())) { 
     logger.innerHTML += ` ${key}:${prop} `; 
    } 
    } 
}); 

observer.observe({ 
    entryTypes: ["resource"] 
}); 
相關問題