首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AJAX调用中遍历PHP时保留实时日志

在AJAX调用中遍历PHP时保留实时日志
EN

Stack Overflow用户
提问于 2021-03-13 09:08:40
回答 1查看 30关注 0票数 0

我正在创建一个Wordpress插件来调用API,并为响应中返回的每个对象创建新的Wordpress帖子。下面是PHP for my函数,它遍历API响应以创建新的Wordpress帖子:

代码语言:javascript
复制
add_action('wp_ajax_sync_posts', 'sync_posts_from_api' );
function sync_posts_from_api() {
    // MAKING API CALL HERE
    
    foreach ($data as $post) {
        $new_post = array(
            'post_type'     => 'post',
            'post_title'    => $post->title,
            'post_status'   => 'publish',
            'post_author'   => 1,
            'post_content'  => $post->description,
        );
        $wp_post = wp_insert_post($new_post);

        echo '<pre>Post ID ' . $wp_post->ID . ') has been created.</pre>';
    }
}

然后我的Javascript是这样的:

代码语言:javascript
复制
jQuery(function($) {
    $('form').submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: ajaxurl,
            data: { 
                action: 'sync_posts'
            },
        }).done(function(response) {
            $('.log').html(response);
        });
    });
});

这在AJAX调用完全完成后才起作用,但我希望能够在执行过程中将每个echo附加到.log容器,而不是在调用完成时立即添加所有all。我该如何做出改变呢?

EN

回答 1

Stack Overflow用户

发布于 2021-03-15 01:22:51

您只能在请求完成后访问ajax请求响应。实现你想要的东西的正确方法是使用web sockets

在过去,我们使用如下代码创建一个iframe加载:

代码语言:javascript
复制
foreach ($data as $post) {

    echo "
        <script>
            window.parent.postMessage({message: '".$post."'}, 'http://localhost/');
        </script>
    ";

    flush();
}

浏览器在加载页面时实时执行js,并且js向父框架发送消息。您还需要在父框架上使用适当的js代码来接收和处理这些帖子。即使这可能仍然有效,但它是非常粗略的,不推荐使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66609172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档