提问人:Luca Reghellin 提问时间:3/21/2022 更新时间:3/21/2022 访问量:62
为什么通过 ajax 获取 php 时会获得 2 次文件?
Why am I getting a file 2 times when fetching a php via ajax?
问:
这对我来说很好奇。我有一个像这样的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 class="live-ajax-messages">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>
为什么?
答:
2赞
garrettmills
3/21/2022
#1
输出缓冲(函数)临时缓冲输出。如果脚本在仍有缓冲输出时退出,则该脚本将被写入响应。ob_*
因此,在这里,您正在缓冲 的输出。对 的调用返回当前缓冲区,但不清除它。search-results-messages.php
ob_get_contents
然后,当您调用它时,它会将内容写入响应,然后刷新也包含内容的输出缓冲区。exit($contents)
这里有两种可能的解决方案。(1)是替换 with which 做同样的事情,但清除缓冲区。ob_get_contents
ob_get_clean
另一个(更简单的)解决方案是只包含文件而不进行输出缓冲,因为您无论如何都想写出其内容,然后只在不带参数的情况下调用。exit();
评论