這對我來說很好奇。我有一個這樣的 php 測驗檔案:
<div class="live-ajax-messages">message from deep ajax</div>
我將使用此功能獲得它:
public function get_ajax_messages_template() {
ob_start();
include(__DIR__. '/../templates/search-results-messages.php');
$content = ob_get_contents();
exit($content);
}
我會得到這樣的函式輸出:
load_ajax_messages_template: function(){
jQuery.ajax({
url: ajax_url,
data: 'action=my_action', // executes get_ajax_messages_template
dataType: 'html',
type: "GET",
success: function(response){
console.log(response); // getting 2 times <div >message from deep ajax</div>
//this.results_el.find('.ajax-results').html(response);
}.bind(this),
})
},
基本上,我會得到
<div class="live-ajax-messages">message from deep ajax</div>
<div class="live-ajax-messages">message from deep ajax</div>
為什么?
uj5u.com熱心網友回復:
輸出緩沖(ob_*函式)臨時緩沖輸出。如果腳本在仍有緩沖輸出時退出,它將被寫入回應。
所以,在這里你正在緩沖search-results-messages.php. 呼叫ob_get_contents回傳當前緩沖區,但不清除它。
然后,當您呼叫exit($contents)它時,會將內容寫入回應,然后重繪 也包含內容的輸出緩沖區。
這里有兩種可能的解決方案。(1) 是替換ob_get_contents為ob_get_cleanwhich 做同樣的事情,但清除緩沖區。
另一個(更簡單)的解決方案是只包含檔案而沒有輸出緩沖,因為無論如何你都想寫出它的內容,然后只呼叫exit();不帶引數的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449418.html
標籤:javascript php 阿贾克斯 输出缓冲
上一篇:如何在不出現控制臺錯誤的情況下檢查API物件是否未定義?
下一篇:如何使用AJAX獲取模型物件?
